From 8fcad26789c2ca267baee05e8ef53dbe460bdb61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A9sir=C3=A9=20Werner=20Menrath?= Date: Sun, 10 Aug 2025 15:44:28 +0200 Subject: [PATCH] new icons added and replace old icons and updated tk-themes --- Changelog | 8 + TK-Themes/theme/dark.tcl | 1160 ++++++++-------- .../theme/dark/button-borderless-hover.png | Bin 0 -> 1819 bytes TK-Themes/theme/dark/button-hover.png | Bin 346 -> 4693 bytes TK-Themes/theme/dark/combo-button-basic.png | Bin 242 -> 2319 bytes TK-Themes/theme/dark/combo-button-focus.png | Bin 4312 -> 3097 bytes TK-Themes/theme/dark/combo-button-hover.png | Bin 297 -> 4086 bytes TK-Themes/theme/dark/hor-pbar-small.png | Bin 0 -> 104 bytes TK-Themes/theme/dark/hor-pbar.png | Bin 0 -> 179 bytes TK-Themes/theme/dark/hor-trough-small.png | Bin 0 -> 106 bytes TK-Themes/theme/dark/hor-trough.png | Bin 0 -> 183 bytes TK-Themes/theme/dark/rect-basic.png | Bin 286 -> 2476 bytes TK-Themes/theme/dark/vert-pbar-small.png | Bin 0 -> 151 bytes TK-Themes/theme/dark/vert-pbar.png | Bin 0 -> 221 bytes TK-Themes/theme/dark/vert-trough-small.png | Bin 0 -> 154 bytes TK-Themes/theme/dark/vert-trough.png | Bin 0 -> 228 bytes TK-Themes/theme/light.tcl | 1162 +++++++++-------- .../theme/light/button-borderless-hover.png | Bin 0 -> 1819 bytes TK-Themes/theme/light/button-hover.png | Bin 326 -> 4670 bytes TK-Themes/theme/light/combo-button-basic.png | Bin 247 -> 2230 bytes TK-Themes/theme/light/combo-button-focus.png | Bin 4313 -> 3035 bytes TK-Themes/theme/light/combo-button-hover.png | Bin 299 -> 4035 bytes TK-Themes/theme/light/hor-pbar-small.png | Bin 0 -> 107 bytes TK-Themes/theme/light/hor-pbar.png | Bin 0 -> 185 bytes TK-Themes/theme/light/hor-trough-small.png | Bin 0 -> 106 bytes TK-Themes/theme/light/hor-trough.png | Bin 0 -> 183 bytes TK-Themes/theme/light/rect-basic.png | Bin 250 -> 2253 bytes TK-Themes/theme/light/tab-hover.png | Bin 263 -> 3843 bytes TK-Themes/theme/light/vert-pbar-small.png | Bin 0 -> 167 bytes TK-Themes/theme/light/vert-pbar.png | Bin 0 -> 251 bytes TK-Themes/theme/light/vert-trough-small.png | Bin 0 -> 154 bytes TK-Themes/theme/light/vert-trough.png | Bin 0 -> 228 bytes TK-Themes/water.tcl | 9 +- lx-icons/128/settings-2.png | Bin 0 -> 65969 bytes lx-icons/128/settings.png | Bin 0 -> 65969 bytes lx-icons/16/settings.png | Bin 757 -> 697 bytes lx-icons/16/wg_vpn.png | Bin 846 -> 0 bytes lx-icons/256/settings-2.png | Bin 0 -> 263023 bytes lx-icons/256/settings.png | Bin 0 -> 263023 bytes lx-icons/256/trash.png | Bin 0 -> 263023 bytes lx-icons/32/arrow-left.png | Bin 0 -> 662 bytes lx-icons/32/arrow-right.png | Bin 0 -> 661 bytes lx-icons/32/arrow-up.png | Bin 0 -> 4980 bytes lx-icons/32/audio.png | Bin 0 -> 969 bytes lx-icons/32/carrel.png | Bin 0 -> 665 bytes lx-icons/32/computer.png | Bin 0 -> 4327 bytes lx-icons/32/device.png | Bin 0 -> 1014 bytes lx-icons/32/document.png | Bin 0 -> 524 bytes lx-icons/32/file-python.png | Bin 0 -> 1185 bytes lx-icons/32/folder-water-documents.png | Bin 0 -> 939 bytes lx-icons/32/folder-water-download.png | Bin 0 -> 995 bytes lx-icons/32/folder-water-music.png | Bin 0 -> 1021 bytes lx-icons/32/folder-water-pictures.png | Bin 0 -> 1073 bytes lx-icons/32/folder-water-video.png | Bin 0 -> 971 bytes lx-icons/32/folder-water.png | Bin 0 -> 766 bytes lx-icons/32/hide.png | Bin 0 -> 4327 bytes lx-icons/32/home.png | Bin 0 -> 546 bytes lx-icons/32/list.png | Bin 0 -> 801 bytes lx-icons/32/lxtools_key.png | Bin 0 -> 1371 bytes lx-icons/32/media-optical.png | Bin 0 -> 1055 bytes lx-icons/32/new-document.png | Bin 0 -> 4327 bytes lx-icons/32/new-folder.png | Bin 0 -> 4327 bytes lx-icons/32/pdf.png | Bin 0 -> 1070 bytes lx-icons/32/picture.png | Bin 0 -> 1441 bytes lx-icons/32/recursive.png | Bin 0 -> 4327 bytes lx-icons/32/search.png | Bin 0 -> 978 bytes lx-icons/32/settings-2.png | Bin 0 -> 4327 bytes lx-icons/32/settings.png | Bin 0 -> 1248 bytes lx-icons/32/tar.png | Bin 0 -> 1101 bytes lx-icons/32/trash.png | Bin 0 -> 1027 bytes lx-icons/32/unhide.png | Bin 0 -> 4327 bytes lx-icons/32/usb.png | Bin 0 -> 1281 bytes lx-icons/32/video.png | Bin 0 -> 760 bytes lx-icons/48/arrow-left.png | Bin 0 -> 875 bytes lx-icons/48/arrow-right.png | Bin 0 -> 816 bytes lx-icons/48/arrow-up.png | Bin 0 -> 10294 bytes lx-icons/48/carrel.png | Bin 0 -> 818 bytes lx-icons/48/computer.png | Bin 0 -> 708 bytes lx-icons/48/device.png | Bin 0 -> 1339 bytes lx-icons/48/folder-water-documents.png | Bin 0 -> 1280 bytes lx-icons/48/folder-water-download.png | Bin 0 -> 1382 bytes lx-icons/48/folder-water-music.png | Bin 0 -> 1506 bytes lx-icons/48/folder-water-pictures.png | Bin 0 -> 1493 bytes lx-icons/48/folder-water-video.png | Bin 0 -> 1387 bytes lx-icons/48/folder-water.png | Bin 0 -> 1048 bytes lx-icons/48/hide.png | Bin 0 -> 9475 bytes lx-icons/48/home.png | Bin 0 -> 641 bytes lx-icons/48/list.png | Bin 0 -> 984 bytes lx-icons/48/new-document.png | Bin 0 -> 9475 bytes lx-icons/48/new-folder.png | Bin 0 -> 9475 bytes lx-icons/48/recursive.png | Bin 0 -> 9475 bytes lx-icons/48/search.png | Bin 0 -> 1377 bytes lx-icons/48/settings-2.png | Bin 0 -> 9475 bytes lx-icons/48/settings.png | Bin 0 -> 1713 bytes lx-icons/48/trash.png | Bin 0 -> 1414 bytes lx-icons/48/unhide.png | Bin 0 -> 9475 bytes lx-icons/48/usb.png | Bin 0 -> 1676 bytes lx-icons/64/arrow-left.png | Bin 0 -> 1068 bytes lx-icons/64/arrow-right.png | Bin 0 -> 17670 bytes lx-icons/64/arrow-up.png | Bin 0 -> 17687 bytes lx-icons/64/audio.png | Bin 0 -> 16671 bytes lx-icons/64/carrel.png | Bin 0 -> 970 bytes lx-icons/64/computer.png | Bin 0 -> 16671 bytes lx-icons/64/device.png | Bin 0 -> 1588 bytes lx-icons/64/document.png | Bin 0 -> 612 bytes lx-icons/64/file-python.png | Bin 0 -> 16671 bytes lx-icons/64/folder-water-documents.png | Bin 0 -> 16671 bytes lx-icons/64/folder-water-download.png | Bin 0 -> 16671 bytes lx-icons/64/folder-water-music.png | Bin 0 -> 16671 bytes lx-icons/64/folder-water-pictures.png | Bin 0 -> 16671 bytes lx-icons/64/folder-water-video.png | Bin 0 -> 16671 bytes lx-icons/64/folder-water.png | Bin 0 -> 16671 bytes lx-icons/64/hide.png | Bin 0 -> 16671 bytes lx-icons/64/home.png | Bin 0 -> 737 bytes lx-icons/64/list.png | Bin 0 -> 1095 bytes lx-icons/64/media-optical.png | Bin 0 -> 2391 bytes lx-icons/64/new-document.png | Bin 0 -> 16671 bytes lx-icons/64/new-folder.png | Bin 0 -> 16671 bytes lx-icons/64/pdf.png | Bin 0 -> 16671 bytes lx-icons/64/picture.png | Bin 0 -> 16671 bytes lx-icons/64/recursive.png | Bin 0 -> 16671 bytes lx-icons/64/search.png | Bin 0 -> 1691 bytes lx-icons/64/settings-2.png | Bin 0 -> 16671 bytes lx-icons/64/settings.png | Bin 0 -> 1945 bytes lx-icons/64/tar.png | Bin 0 -> 16671 bytes lx-icons/64/trash.png | Bin 0 -> 1695 bytes lx-icons/64/unhide.png | Bin 0 -> 16671 bytes lx-icons/64/usb.png | Bin 0 -> 1746 bytes lx-icons/64/video.png | Bin 0 -> 16671 bytes ssl_decrypt.py | 8 +- ssl_encrypt.py | 14 +- start_wg.py | 2 +- tunnel.py | 22 +- wirepy.py | 282 ++-- wp_app_config.py | 124 +- 135 files changed, 1473 insertions(+), 1318 deletions(-) create mode 100644 TK-Themes/theme/dark/button-borderless-hover.png create mode 100644 TK-Themes/theme/dark/hor-pbar-small.png create mode 100644 TK-Themes/theme/dark/hor-pbar.png create mode 100644 TK-Themes/theme/dark/hor-trough-small.png create mode 100644 TK-Themes/theme/dark/hor-trough.png create mode 100644 TK-Themes/theme/dark/vert-pbar-small.png create mode 100644 TK-Themes/theme/dark/vert-pbar.png create mode 100644 TK-Themes/theme/dark/vert-trough-small.png create mode 100644 TK-Themes/theme/dark/vert-trough.png create mode 100644 TK-Themes/theme/light/button-borderless-hover.png create mode 100644 TK-Themes/theme/light/hor-pbar-small.png create mode 100644 TK-Themes/theme/light/hor-pbar.png create mode 100644 TK-Themes/theme/light/hor-trough-small.png create mode 100644 TK-Themes/theme/light/hor-trough.png create mode 100644 TK-Themes/theme/light/vert-pbar-small.png create mode 100644 TK-Themes/theme/light/vert-pbar.png create mode 100644 TK-Themes/theme/light/vert-trough-small.png create mode 100644 TK-Themes/theme/light/vert-trough.png create mode 100644 lx-icons/128/settings-2.png create mode 100644 lx-icons/128/settings.png delete mode 100644 lx-icons/16/wg_vpn.png create mode 100644 lx-icons/256/settings-2.png create mode 100644 lx-icons/256/settings.png create mode 100644 lx-icons/256/trash.png create mode 100644 lx-icons/32/arrow-left.png create mode 100644 lx-icons/32/arrow-right.png create mode 100644 lx-icons/32/arrow-up.png create mode 100644 lx-icons/32/audio.png create mode 100644 lx-icons/32/carrel.png create mode 100644 lx-icons/32/computer.png create mode 100644 lx-icons/32/device.png create mode 100644 lx-icons/32/document.png create mode 100644 lx-icons/32/file-python.png create mode 100644 lx-icons/32/folder-water-documents.png create mode 100644 lx-icons/32/folder-water-download.png create mode 100644 lx-icons/32/folder-water-music.png create mode 100644 lx-icons/32/folder-water-pictures.png create mode 100644 lx-icons/32/folder-water-video.png create mode 100644 lx-icons/32/folder-water.png create mode 100644 lx-icons/32/hide.png create mode 100644 lx-icons/32/home.png create mode 100644 lx-icons/32/list.png create mode 100644 lx-icons/32/lxtools_key.png create mode 100644 lx-icons/32/media-optical.png create mode 100644 lx-icons/32/new-document.png create mode 100644 lx-icons/32/new-folder.png create mode 100644 lx-icons/32/pdf.png create mode 100644 lx-icons/32/picture.png create mode 100644 lx-icons/32/recursive.png create mode 100644 lx-icons/32/search.png create mode 100644 lx-icons/32/settings-2.png create mode 100644 lx-icons/32/settings.png create mode 100644 lx-icons/32/tar.png create mode 100644 lx-icons/32/trash.png create mode 100644 lx-icons/32/unhide.png create mode 100644 lx-icons/32/usb.png create mode 100644 lx-icons/32/video.png create mode 100644 lx-icons/48/arrow-left.png create mode 100644 lx-icons/48/arrow-right.png create mode 100644 lx-icons/48/arrow-up.png create mode 100644 lx-icons/48/carrel.png create mode 100644 lx-icons/48/computer.png create mode 100644 lx-icons/48/device.png create mode 100644 lx-icons/48/folder-water-documents.png create mode 100644 lx-icons/48/folder-water-download.png create mode 100644 lx-icons/48/folder-water-music.png create mode 100644 lx-icons/48/folder-water-pictures.png create mode 100644 lx-icons/48/folder-water-video.png create mode 100644 lx-icons/48/folder-water.png create mode 100644 lx-icons/48/hide.png create mode 100644 lx-icons/48/home.png create mode 100644 lx-icons/48/list.png create mode 100644 lx-icons/48/new-document.png create mode 100644 lx-icons/48/new-folder.png create mode 100644 lx-icons/48/recursive.png create mode 100644 lx-icons/48/search.png create mode 100644 lx-icons/48/settings-2.png create mode 100644 lx-icons/48/settings.png create mode 100644 lx-icons/48/trash.png create mode 100644 lx-icons/48/unhide.png create mode 100644 lx-icons/48/usb.png create mode 100644 lx-icons/64/arrow-left.png create mode 100644 lx-icons/64/arrow-right.png create mode 100644 lx-icons/64/arrow-up.png create mode 100644 lx-icons/64/audio.png create mode 100644 lx-icons/64/carrel.png create mode 100644 lx-icons/64/computer.png create mode 100644 lx-icons/64/device.png create mode 100644 lx-icons/64/document.png create mode 100644 lx-icons/64/file-python.png create mode 100644 lx-icons/64/folder-water-documents.png create mode 100644 lx-icons/64/folder-water-download.png create mode 100644 lx-icons/64/folder-water-music.png create mode 100644 lx-icons/64/folder-water-pictures.png create mode 100644 lx-icons/64/folder-water-video.png create mode 100644 lx-icons/64/folder-water.png create mode 100644 lx-icons/64/hide.png create mode 100644 lx-icons/64/home.png create mode 100644 lx-icons/64/list.png create mode 100644 lx-icons/64/media-optical.png create mode 100644 lx-icons/64/new-document.png create mode 100644 lx-icons/64/new-folder.png create mode 100644 lx-icons/64/pdf.png create mode 100644 lx-icons/64/picture.png create mode 100644 lx-icons/64/recursive.png create mode 100644 lx-icons/64/search.png create mode 100644 lx-icons/64/settings-2.png create mode 100644 lx-icons/64/settings.png create mode 100644 lx-icons/64/tar.png create mode 100644 lx-icons/64/trash.png create mode 100644 lx-icons/64/unhide.png create mode 100644 lx-icons/64/usb.png create mode 100644 lx-icons/64/video.png diff --git a/Changelog b/Changelog index 70328fe..c515d94 100644 --- a/Changelog +++ b/Changelog @@ -8,6 +8,14 @@ My standard System: Linux Mint 22 Cinnamon - for loops with lists replaced by List Comprehensions - Replace Download Button with Lx Tools installer + ### Added +01.08.2025 + - Replace Imagemanager with IconManager and remove ImageManager from wp_app_config.py + + - Logging improved + + + ### Added 02-07-2025 diff --git a/TK-Themes/theme/dark.tcl b/TK-Themes/theme/dark.tcl index 2ad09db..33b3d6f 100644 --- a/TK-Themes/theme/dark.tcl +++ b/TK-Themes/theme/dark.tcl @@ -1,539 +1,621 @@ -# Copyright (c) 2021 rdbende - -# inspired by rdbende modified azure to water by Désire Werner Menrath polunga40@unity-mail.de 2024 - -package require Tk 8.6 - -namespace eval ttk::theme::water-dark { - variable version 2.0 - package provide ttk::theme::water-dark $version - - ttk::style theme create water-dark -parent clam -settings { - proc load_images {imgdir} { - variable I - foreach file [glob -directory $imgdir *.png] { - set img [file tail [file rootname $file]] - set I($img) [image create photo -file $file -format png] - } - } - - load_images [file join [file dirname [info script]] dark] - - array set colors { - -fg "#ffffff" - -bg "#333333" - -disabledfg "#aaaaaa" - -disabledbg "#737373" - -selectfg "#ffffff" - -selectbg "#007fff" - } - - ttk::style layout TButton { - Button.button -children { - Button.padding -children { - Button.label -side left -expand true - } - } - } - - ttk::style layout Toolbutton { - Toolbutton.button -children { - Toolbutton.padding -children { - Toolbutton.label -side left -expand true - } - } - } - - ttk::style layout TMenubutton { - Menubutton.button -children { - Menubutton.padding -children { - Menubutton.indicator -side right - Menubutton.label -side right -expand true - } - } - } - - ttk::style layout TOptionMenu { - OptionMenu.button -children { - OptionMenu.padding -children { - OptionMenu.indicator -side right - OptionMenu.label -side right -expand true - } - } - } - - ttk::style layout Accent.TButton { - AccentButton.button -children { - AccentButton.padding -children { - AccentButton.label -side left -expand true - } - } - } - - ttk::style layout TCheckbutton { - Checkbutton.button -children { - Checkbutton.padding -children { - Checkbutton.indicator -side left - Checkbutton.label -side right -expand true - } - } - } - - ttk::style layout Switch.TCheckbutton { - Switch.button -children { - Switch.padding -children { - Switch.indicator -side left - Switch.label -side right -expand true - } - } - } - - ttk::style layout Toggle.TButton { - ToggleButton.button -children { - ToggleButton.padding -children { - ToggleButton.label -side left -expand true - } - } - } - - ttk::style layout TRadiobutton { - Radiobutton.button -children { - Radiobutton.padding -children { - Radiobutton.indicator -side left - Radiobutton.label -side right -expand true - } - } - } - - ttk::style layout Vertical.TScrollbar { - Vertical.Scrollbar.trough -sticky ns -children { - Vertical.Scrollbar.thumb -expand true - } - } - - ttk::style layout Horizontal.TScrollbar { - Horizontal.Scrollbar.trough -sticky ew -children { - Horizontal.Scrollbar.thumb -expand true - } - } - - ttk::style layout TCombobox { - Combobox.field -sticky nswe -children { - Combobox.padding -expand true -sticky nswe -children { - Combobox.textarea -sticky nswe - } - } - Combobox.button -side right -sticky ns -children { - Combobox.arrow -sticky nsew - } - } - - ttk::style layout TSpinbox { - Spinbox.field -sticky nsew -children { - Spinbox.padding -expand true -sticky nswe -children { - Spinbox.textarea -sticky nswe - } - - } - Spinbox.button -side right -sticky ns -children { - null -side right -children { - Spinbox.uparrow -side top - Spinbox.downarrow -side bottom - } - } - } - - ttk::style layout Horizontal.TSeparator { - Horizontal.separator -sticky nswe - } - - ttk::style layout Vertical.TSeparator { - Vertical.separator -sticky nswe - } - - ttk::style layout Horizontal.Tick.TScale { - Horizontal.TickScale.trough -sticky ew -children { - Horizontal.TickScale.slider -sticky w - } - } - - ttk::style layout Vertical.Tick.TScale { - Vertical.TickScale.trough -sticky ns -children { - Vertical.TickScale.slider -sticky n - } - } - - ttk::style layout Card.TFrame { - Card.field { - Card.padding -expand 1 - } - } - - ttk::style layout TLabelframe { - Labelframe.border { - Labelframe.padding -expand 1 -children { - Labelframe.label -side right - } - } - } - - ttk::style layout TNotebook.Tab { - Notebook.tab -children { - Notebook.padding -side top -children { - Notebook.label -side top -sticky {} - } - } - } - - ttk::style layout Treeview.Item { - Treeitem.padding -sticky nswe -children { - Treeitem.indicator -side left -sticky {} - Treeitem.image -side left -sticky {} - Treeitem.text -side left -sticky {} - } - } - - - # Elements - - # Button - ttk::style configure TButton -padding {8 4 8 4} -width -10 -anchor center - - ttk::style element create Button.button image \ - [list $I(box-basic) \ - {selected disabled} $I(box-basic) \ - disabled $I(box-basic) \ - pressed $I(box-basic) \ - selected $I(box-basic) \ - active $I(button-hover) \ - focus $I(button-hover) \ - ] -border 4 -sticky ewns - - # Toolbutton - ttk::style configure Toolbutton -padding {8 4 8 4} -width -5 -anchor center - - ttk::style element create Toolbutton.button image \ - [list $I(empty) \ - {selected disabled} $I(empty) \ - disabled $I(empty) \ - pressed $I(rect-basic) \ - selected $I(rect-basic) \ - active $I(rect-basic) \ - ] -border 4 -sticky ewns - - # Menubutton - ttk::style configure TMenubutton -padding {8 4 4 4} - - ttk::style element create Menubutton.button \ - image [list $I(rect-basic) \ - disabled $I(rect-basic) \ - pressed $I(rect-basic) \ - active $I(button-hover) \ - ] -border 4 -sticky ewns - - ttk::style element create Menubutton.indicator \ - image [list $I(down) \ - active $I(down) \ - pressed $I(down) \ - disabled $I(down) \ - ] -width 15 -sticky e - - # OptionMenu - ttk::style configure TOptionMenu -padding {8 4 4 4} - - ttk::style element create OptionMenu.button \ - image [list $I(rect-basic) \ - disabled $I(rect-basic) \ - pressed $I(rect-basic) \ - active $I(button-hover) \ - ] -border 4 -sticky ewns - - ttk::style element create OptionMenu.indicator \ - image [list $I(down) \ - active $I(down) \ - pressed $I(down) \ - disabled $I(down) \ - ] -width 15 -sticky e - - # AccentButton - ttk::style configure Accent.TButton -padding {8 4 8 4} -width -10 -anchor center - - ttk::style element create AccentButton.button image \ - [list $I(rect-accent) \ - {selected disabled} $I(rect-accent-hover) \ - disabled $I(rect-accent-hover) \ - pressed $I(rect-accent) \ - selected $I(rect-accent) \ - active $I(rect-accent-hover) \ - focus $I(rect-accent-hover) \ - ] -border 4 -sticky ewns - - # Checkbutton - ttk::style configure TCheckbutton -padding 4 - - ttk::style element create Checkbutton.indicator image \ - [list $I(box-basic) \ - {alternate disabled} $I(check-tri-basic) \ - {selected disabled} $I(check-basic) \ - disabled $I(box-basic) \ - {pressed alternate} $I(check-tri-hover) \ - {active alternate} $I(check-tri-hover) \ - alternate $I(check-tri-accent) \ - {pressed selected} $I(check-hover) \ - {active selected} $I(check-hover) \ - selected $I(check-accent) \ - {pressed !selected} $I(rect-hover) \ - active $I(box-hover) \ - ] -width 26 -sticky w - - # Switch - ttk::style element create Switch.indicator image \ - [list $I(off-basic) \ - {selected disabled} $I(on-basic) \ - disabled $I(off-basic) \ - {pressed selected} $I(on-accent) \ - {active selected} $I(on-accent) \ - selected $I(on-accent) \ - {pressed !selected} $I(off-basic) \ - active $I(off-basic) \ - ] -width 46 -sticky w - - # ToggleButton - ttk::style configure Toggle.TButton -padding {8 4 8 4} -width -10 -anchor center - - ttk::style element create ToggleButton.button image \ - [list $I(rect-basic) \ - {selected disabled} $I(rect-accent-hover) \ - disabled $I(rect-basic) \ - {pressed selected} $I(rect-basic) \ - {active selected} $I(rect-accent) \ - selected $I(rect-accent) \ - {pressed !selected} $I(rect-accent) \ - active $I(rect-basic) \ - ] -border 4 -sticky ewns - - # Radiobutton - ttk::style configure TRadiobutton -padding 4 - - ttk::style element create Radiobutton.indicator image \ - [list $I(outline-basic) \ - {alternate disabled} $I(radio-tri-basic) \ - {selected disabled} $I(radio-basic) \ - disabled $I(outline-basic) \ - {pressed alternate} $I(radio-tri-hover) \ - {active alternate} $I(radio-tri-hover) \ - alternate $I(radio-tri-accent) \ - {pressed selected} $I(radio-hover) \ - {active selected} $I(radio-hover) \ - selected $I(radio-accent) \ - {pressed !selected} $I(circle-hover) \ - active $I(outline-hover) \ - ] -width 26 -sticky w - - # Scrollbar - ttk::style element create Horizontal.Scrollbar.trough image $I(hor-basic) \ - -sticky ew - - ttk::style element create Horizontal.Scrollbar.thumb \ - image [list $I(hor-accent) \ - disabled $I(hor-basic) \ - pressed $I(hor-hover) \ - active $I(hor-hover) \ - ] -sticky ew - - ttk::style element create Vertical.Scrollbar.trough image $I(vert-basic) \ - -sticky ns - - ttk::style element create Vertical.Scrollbar.thumb \ - image [list $I(vert-accent) \ - disabled $I(vert-basic) \ - pressed $I(vert-hover) \ - active $I(vert-hover) \ - ] -sticky ns - - # Scale - ttk::style element create Horizontal.Scale.trough image $I(scale-hor) \ - -border 5 -padding 0 - - ttk::style element create Horizontal.Scale.slider \ - image [list $I(circle-accent) \ - disabled $I(circle-basic) \ - pressed $I(circle-hover) \ - active $I(circle-hover) \ - ] -sticky {} - - ttk::style element create Vertical.Scale.trough image $I(scale-vert) \ - -border 5 -padding 0 - - ttk::style element create Vertical.Scale.slider \ - image [list $I(circle-accent) \ - disabled $I(circle-basic) \ - pressed $I(circle-hover) \ - active $I(circle-hover) \ - ] -sticky {} - - # Tickscale - ttk::style element create Horizontal.TickScale.trough image $I(scale-hor) \ - -border 5 -padding 0 - - ttk::style element create Horizontal.TickScale.slider \ - image [list $I(tick-hor-accent) \ - disabled $I(tick-hor-basic) \ - pressed $I(tick-hor-hover) \ - active $I(tick-hor-hover) \ - ] -sticky {} - - ttk::style element create Vertical.TickScale.trough image $I(scale-vert) \ - -border 5 -padding 0 - - ttk::style element create Vertical.TickScale.slider \ - image [list $I(tick-vert-accent) \ - disabled $I(tick-vert-basic) \ - pressed $I(tick-vert-hover) \ - active $I(tick-vert-hover) \ - ] -sticky {} - - # Progressbar - ttk::style element create Horizontal.Progressbar.trough image $I(hor-basic) \ - -sticky ew - - ttk::style element create Horizontal.Progressbar.pbar image $I(hor-accent) \ - -sticky ew - - ttk::style element create Vertical.Progressbar.trough image $I(vert-basic) \ - -sticky ns - - ttk::style element create Vertical.Progressbar.pbar image $I(vert-accent) \ - -sticky ns - - # Entry - ttk::style element create Entry.field \ - image [list $I(box-basic) \ - {focus hover} $I(box-accent) \ - invalid $I(box-invalid) \ - disabled $I(box-basic) \ - focus $I(box-accent) \ - hover $I(box-hover) \ - ] -border 5 -padding {8} -sticky news - - # Combobox - ttk::style map TCombobox -selectbackground [list \ - {!focus} $colors(-selectbg) \ - {readonly hover} $colors(-selectbg) \ - {readonly focus} $colors(-selectbg) \ - ] - - ttk::style map TCombobox -selectforeground [list \ - {!focus} $colors(-selectfg) \ - {readonly hover} $colors(-selectfg) \ - {readonly focus} $colors(-selectfg) \ - ] - - ttk::style element create Combobox.field \ - image [list $I(box-basic) \ - {readonly disabled} $I(rect-basic) \ - {readonly pressed} $I(rect-basic) \ - {readonly focus hover} $I(button-hover) \ - {readonly focus} $I(button-hover) \ - {readonly hover} $I(button-hover) \ - {focus hover} $I(box-accent) \ - readonly $I(rect-basic) \ - invalid $I(box-invalid) \ - disabled $I(box-basic) \ - focus $I(box-accent) \ - hover $I(box-hover) \ - ] -border 5 -padding {8} - - ttk::style element create Combobox.button \ - image [list $I(combo-button-basic) \ - {!readonly focus} $I(combo-button-focus) \ - {readonly focus} $I(combo-button-hover) \ - {readonly hover} $I(combo-button-hover) - ] -border 5 -padding {2 6 6 6} - - ttk::style element create Combobox.arrow image $I(down) \ - -width 15 -sticky e - - # Spinbox - ttk::style element create Spinbox.field \ - image [list $I(box-basic) \ - invalid $I(box-invalid) \ - disabled $I(box-basic) \ - focus $I(box-accent) \ - hover $I(box-hover) \ - ] -border 5 -padding {8} -sticky news - - ttk::style element create Spinbox.uparrow \ - image [list $I(up) \ - disabled $I(up) \ - pressed $I(up-accent) \ - active $I(up-accent) \ - ] -border 4 -width 15 -sticky e - - ttk::style element create Spinbox.downarrow \ - image [list $I(down) \ - disabled $I(down) \ - pressed $I(down-accent) \ - active $I(down-accent) \ - ] -border 4 -width 15 -sticky e - - ttk::style element create Spinbox.button \ - image [list $I(combo-button-basic) \ - {!readonly focus} $I(combo-button-focus) \ - {readonly focus} $I(combo-button-hover) \ - {readonly hover} $I(combo-button-hover) - ] -border 5 -padding {2 6 6 6} - - # Sizegrip - ttk::style element create Sizegrip.sizegrip image $I(size) \ - -sticky ewns - - # Separator - ttk::style element create Horizontal.separator image $I(separator) - - ttk::style element create Vertical.separator image $I(separator) - - # Card - ttk::style element create Card.field image $I(card) \ - -border 10 -padding 4 -sticky news - - # Labelframe - ttk::style element create Labelframe.border image $I(card) \ - -border 5 -padding 4 -sticky news - - # Notebook - ttk::style element create Notebook.client \ - image $I(notebook) -border 5 - - ttk::style element create Notebook.tab \ - image [list $I(tab-disabled) \ - selected $I(tab-basic) \ - active $I(tab-hover) \ - ] -border 5 -padding {14 4} - - # Treeview - ttk::style element create Treeview.field image $I(card) \ - -border 5 - - ttk::style element create Treeheading.cell \ - image [list $I(tree-basic) \ - pressed $I(tree-pressed) - ] -border 5 -padding 4 -sticky ewns - - ttk::style element create Treeitem.indicator \ - image [list $I(right) \ - user2 $I(empty) \ - user1 $I(down) \ - ] -width 26 -sticky {} - - ttk::style configure Treeview -background $colors(-bg) - ttk::style configure Treeview.Item -padding {2 0 0 0} - ttk::style map Treeview \ - -background [list selected $colors(-selectbg)] \ - -foreground [list selected $colors(-selectfg)] - - # Panedwindow - # Insane hack to remove clam's ugly sash - ttk::style configure Sash -gripcount 0 - } -} +# Copyright (c) 2021 rdbende + +# inspired by rdbende modified azure to water by Désire Werner Menrath polunga40@unity-mail.de 2024 +# Update add New Style TButton.Borderless for Buttons without edge and without rounded corners by +# Désire Werner Menrath 28-07-2025 +# Add Update Progressbars Round ends on Horizontal and Vertikal + add small bars +# Désire Werner Menrath 30-07-2025 + +package require Tk 8.6 + +namespace eval ttk::theme::water-dark { + variable version 2.0 + package provide ttk::theme::water-dark $version + + ttk::style theme create water-dark -parent clam -settings { + proc load_images {imgdir} { + variable I + foreach file [glob -directory $imgdir *.png] { + set img [file tail [file rootname $file]] + set I($img) [image create photo -file $file -format png] + } + } + + load_images [file join [file dirname [info script]] dark] + + array set colors { + -fg "#ffffff" + -bg "#333333" + -disabledfg "#aaaaaa" + -disabledbg "#737373" + -selectfg "#ffffff" + -selectbg "#007fff" + } + + ttk::style layout TButton { + Button.button -children { + Button.padding -children { + Button.label -side left -expand true + } + } + } + + ttk::style layout Toolbutton { + Toolbutton.button -children { + Toolbutton.padding -children { + Toolbutton.label -side left -expand true + } + } + } + + ttk::style layout TMenubutton { + Menubutton.button -children { + Menubutton.padding -children { + Menubutton.indicator -side right + Menubutton.label -side right -expand true + } + } + } + + ttk::style layout TOptionMenu { + OptionMenu.button -children { + OptionMenu.padding -children { + OptionMenu.indicator -side right + OptionMenu.label -side right -expand true + } + } + } + + ttk::style layout Accent.TButton { + AccentButton.button -children { + AccentButton.padding -children { + AccentButton.label -side left -expand true + } + } + } + + ttk::style layout TCheckbutton { + Checkbutton.button -children { + Checkbutton.padding -children { + Checkbutton.indicator -side left + Checkbutton.label -side right -expand true + } + } + } + + ttk::style layout Switch.TCheckbutton { + Switch.button -children { + Switch.padding -children { + Switch.indicator -side left + Switch.label -side right -expand true + } + } + } + + ttk::style layout Toggle.TButton { + ToggleButton.button -children { + ToggleButton.padding -children { + ToggleButton.label -side left -expand true + } + } + } + + ttk::style layout TRadiobutton { + Radiobutton.button -children { + Radiobutton.padding -children { + Radiobutton.indicator -side left + Radiobutton.label -side right -expand true + } + } + } + + ttk::style layout Vertical.TScrollbar { + Vertical.Scrollbar.trough -sticky ns -children { + Vertical.Scrollbar.thumb -expand true + } + } + + ttk::style layout Horizontal.TScrollbar { + Horizontal.Scrollbar.trough -sticky ew -children { + Horizontal.Scrollbar.thumb -expand true + } + } + + ttk::style layout TEntry { + Combobox.field -sticky nswe -children { + Combobox.padding -expand true -sticky nswe -children { + Combobox.textarea -sticky nswe + } + } + } + + ttk::style layout TCombobox { + Combobox.field -sticky nswe -children { + Combobox.padding -expand true -sticky nswe -children { + Combobox.textarea -sticky nswe + } + } + Combobox.button -side right -sticky ns -children { + Combobox.arrow -sticky nsew + } + } + + ttk::style layout TSpinbox { + Spinbox.field -sticky nsew -children { + Spinbox.padding -expand true -sticky nswe -children { + Spinbox.textarea -sticky nswe + } + + } + Spinbox.button -side right -sticky ns -children { + null -side right -children { + Spinbox.uparrow -side top + Spinbox.downarrow -side bottom + } + } + } + + ttk::style layout Horizontal.TSeparator { + Horizontal.separator -sticky nswe + } + + ttk::style layout Vertical.TSeparator { + Vertical.separator -sticky nswe + } + + ttk::style layout Horizontal.Tick.TScale { + Horizontal.TickScale.trough -sticky ew -children { + Horizontal.TickScale.slider -sticky w + } + } + + ttk::style layout Vertical.Tick.TScale { + Vertical.TickScale.trough -sticky ns -children { + Vertical.TickScale.slider -sticky n + } + } + + ttk::style layout Card.TFrame { + Card.field { + Card.padding -expand 1 + } + } + + ttk::style layout TLabelframe { + Labelframe.border { + Labelframe.padding -expand 1 -children { + Labelframe.label -side right + } + } + } + + ttk::style layout TNotebook.Tab { + Notebook.tab -children { + Notebook.padding -side top -children { + Notebook.label -side top -sticky {} + } + } + } + + ttk::style layout Treeview.Item { + Treeitem.padding -sticky nswe -children { + Treeitem.indicator -side left -sticky {} + Treeitem.image -side left -sticky {} + Treeitem.text -side left -sticky {} + } + } + + + # Elements + + # Button + ttk::style configure TButton -padding {8 4 8 4} -width -10 -anchor center + + ttk::style element create Button.button image [list $I(box-basic) {selected disabled} $I(box-basic) disabled $I(box-basic) pressed $I(box-basic) selected $I(box-basic) active $I(button-hover) focus $I(box-basic) ] -border 4 -sticky ewns + + # Borderless Button + ttk::style configure TButton.Borderless -padding 0 -width -10 -anchor center + ttk::style element create BorderlessButton.button image \ + [list $I(empty) \ + active $I(button-borderless-hover) \ + pressed $I(button-borderless-hover) \ + focus $I(button-borderless-hover) \ + ] -border 0 -sticky ewns + ttk::style layout TButton.Borderless { + BorderlessButton.button -children { + Button.padding -children { + Button.label -side left -expand true + } + } + } + + # Toolbutton + ttk::style configure Toolbutton -padding {8 4 8 4} -width -5 -anchor center + + ttk::style element create Toolbutton.button image \ + [list $I(empty) \ + {selected disabled} $I(empty) \ + disabled $I(empty) \ + pressed $I(rect-basic) \ + selected $I(rect-basic) \ + active $I(rect-basic) \ + ] -border 4 -sticky ewns + + # TButton Borderless Round + ttk::style configure TButton.Borderless.Round -padding 0 -width -10 -anchor center + ttk::style element create TButton.Borderless.Round.button image \ + [list $I(empty) \ + {selected disabled} $I(empty) \ + disabled $I(empty) \ + selected $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(rect-basic) \ + ] -border 4 -sticky ewns + ttk::style layout TButton.Borderless.Round { + TButton.Borderless.Round.button -children { + Button.padding -children { + Button.label -side left -expand true + } + } + } + + # Menubutton + ttk::style configure TMenubutton -padding {8 4 4 4} + + ttk::style element create Menubutton.button \ + image [list $I(rect-basic) \ + disabled $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(button-hover) \ + ] -border 4 -sticky ewns + + ttk::style element create Menubutton.indicator \ + image [list $I(down) \ + active $I(down) \ + pressed $I(down) \ + disabled $I(down) \ + ] -width 15 -sticky e + + # OptionMenu + ttk::style configure TOptionMenu -padding {8 4 4 4} + + ttk::style element create OptionMenu.button \ + image [list $I(rect-basic) \ + disabled $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(button-hover) \ + ] -border 4 -sticky ewns + + ttk::style element create OptionMenu.indicator \ + image [list $I(down) \ + active $I(down) \ + pressed $I(down) \ + disabled $I(down) \ + ] -width 15 -sticky e + + # AccentButton + ttk::style configure Accent.TButton -padding {8 4 8 4} -width -10 -anchor center + + ttk::style element create AccentButton.button image \ + [list $I(rect-accent) \ + {selected disabled} $I(rect-accent-hover) \ + disabled $I(rect-accent-hover) \ + pressed $I(rect-accent) \ + selected $I(rect-accent) \ + active $I(rect-accent-hover) \ + focus $I(rect-accent) \ + ] -border 4 -sticky ewns + + # Checkbutton + ttk::style configure TCheckbutton -padding 4 + + ttk::style element create Checkbutton.indicator image \ + [list $I(box-basic) \ + {alternate disabled} $I(check-tri-basic) \ + {selected disabled} $I(check-basic) \ + disabled $I(box-basic) \ + {pressed alternate} $I(check-tri-hover) \ + {active alternate} $I(check-tri-hover) \ + alternate $I(check-tri-accent) \ + {pressed selected} $I(check-hover) \ + {active selected} $I(check-hover) \ + selected $I(check-accent) \ + {pressed !selected} $I(rect-hover) \ + active $I(box-hover) \ + ] -width 26 -sticky w + + # Switch + ttk::style element create Switch.indicator image \ + [list $I(off-basic) \ + {selected disabled} $I(on-basic) \ + disabled $I(off-basic) \ + {pressed selected} $I(on-accent) \ + {active selected} $I(on-accent) \ + selected $I(on-accent) \ + {pressed !selected} $I(off-basic) \ + active $I(off-basic) \ + ] -width 46 -sticky w + + # ToggleButton + ttk::style configure Toggle.TButton -padding {8 4 8 4} -width -10 -anchor center + + ttk::style element create ToggleButton.button image \ + [list $I(rect-basic) \ + {selected disabled} $I(rect-accent-hover) \ + disabled $I(rect-basic) \ + {pressed selected} $I(rect-basic) \ + {active selected} $I(rect-accent) \ + selected $I(rect-accent) \ + {pressed !selected} $I(rect-accent) \ + active $I(rect-basic) \ + ] -border 4 -sticky ewns + + # Radiobutton + ttk::style configure TRadiobutton -padding 4 + + ttk::style element create Radiobutton.indicator image \ + [list $I(outline-basic) \ + {alternate disabled} $I(radio-tri-basic) \ + {selected disabled} $I(radio-basic) \ + disabled $I(outline-basic) \ + {pressed alternate} $I(radio-tri-hover) \ + {active alternate} $I(radio-tri-hover) \ + alternate $I(radio-tri-accent) \ + {pressed selected} $I(radio-hover) \ + {active selected} $I(radio-hover) \ + selected $I(radio-accent) \ + {pressed !selected} $I(circle-hover) \ + active $I(outline-hover) \ + ] -width 26 -sticky w + + # Scrollbar + ttk::style element create Horizontal.Scrollbar.trough image $I(hor-basic) \ + -sticky ew + + ttk::style element create Horizontal.Scrollbar.thumb \ + image [list $I(hor-accent) \ + disabled $I(hor-basic) \ + pressed $I(hor-hover) \ + active $I(hor-hover) \ + ] -sticky ew + + ttk::style element create Vertical.Scrollbar.trough image $I(vert-basic) \ + -sticky ns + + ttk::style element create Vertical.Scrollbar.thumb \ + image [list $I(vert-accent) \ + disabled $I(vert-basic) \ + pressed $I(vert-hover) \ + active $I(vert-hover) \ + ] -sticky ns + + # Scale + ttk::style element create Horizontal.Scale.trough image $I(scale-hor) \ + -border 5 -padding 0 + + ttk::style element create Horizontal.Scale.slider \ + image [list $I(circle-accent) \ + disabled $I(circle-basic) \ + pressed $I(circle-hover) \ + active $I(circle-hover) \ + ] -sticky {} + + ttk::style element create Vertical.Scale.trough image $I(scale-vert) \ + -border 5 -padding 0 + + ttk::style element create Vertical.Scale.slider \ + image [list $I(circle-accent) \ + disabled $I(circle-basic) \ + pressed $I(circle-hover) \ + active $I(circle-hover) \ + ] -sticky {} + + # Tickscale + ttk::style element create Horizontal.TickScale.trough image $I(scale-hor) \ + -border 5 -padding 0 + + ttk::style element create Horizontal.TickScale.slider \ + image [list $I(tick-hor-accent) \ + disabled $I(tick-hor-basic) \ + pressed $I(tick-hor-hover) \ + active $I(tick-hor-hover) \ + ] -sticky {} + + ttk::style element create Vertical.TickScale.trough image $I(scale-vert) \ + -border 5 -padding 0 + + ttk::style element create Vertical.TickScale.slider \ + image [list $I(tick-vert-accent) \ + disabled $I(tick-vert-basic) \ + pressed $I(tick-vert-hover) \ + active $I(tick-vert-hover) \ + ] -sticky {} + + # Progressbar + ttk::style layout Horizontal.TProgressbar { + Horizontal.Progressbar.trough -children { + Horizontal.Progressbar.pbar + } + } + ttk::style layout Vertical.TProgressbar { + Vertical.Progressbar.trough -children { + Vertical.Progressbar.pbar + } + } + + ttk::style element create Horizontal.Progressbar.trough image $I(hor-trough) \ + -border 3 -padding 0 -sticky ew + + ttk::style element create Horizontal.Progressbar.pbar image $I(hor-pbar) \ + -border 3 -padding 0 -sticky ew + + ttk::style element create Vertical.Progressbar.trough image $I(vert-trough) \ + -border 3 -padding 0 -sticky ns + + ttk::style element create Vertical.Progressbar.pbar image $I(vert-pbar) \ + -border 3 -padding 0 -sticky ns + + # Small Progressbar + ttk::style layout Small.Horizontal.TProgressbar { + Small.Horizontal.Progressbar.trough -children { + Small.Horizontal.Progressbar.pbar + } + } + ttk::style layout Small.Vertical.TProgressbar { + Small.Vertical.Progressbar.trough -children { + Small.Vertical.Progressbar.pbar + } + } + + ttk::style element create Small.Horizontal.Progressbar.trough image $I(hor-trough-small) \ + -border 1 -padding 0 -sticky ew + + ttk::style element create Small.Horizontal.Progressbar.pbar image $I(hor-pbar-small) \ + -border 1 -padding 0 -sticky ew + + ttk::style element create Small.Vertical.Progressbar.trough image $I(vert-trough-small) \ + -border 1 -padding 0 -sticky ns + + ttk::style element create Small.Vertical.Progressbar.pbar image $I(vert-pbar-small) \ + -border 1 -padding 0 -sticky ns + + # Entry + ttk::style element create Entry.field \ + image [list $I(box-basic) \ + {focus hover} $I(box-accent) \ + invalid $I(box-invalid) \ + disabled $I(box-basic) \ + focus $I(box-accent) \ + hover $I(box-hover) \ + ] -border 5 -padding {8} -sticky news + + # Combobox + ttk::style map TCombobox -selectbackground [list \ + {!focus} $colors(-selectbg) \ + {readonly hover} $colors(-selectbg) \ + {readonly focus} $colors(-selectbg) \ + ] + + ttk::style map TCombobox -selectforeground [list \ + {!focus} $colors(-selectfg) \ + {readonly hover} $colors(-selectfg) \ + {readonly focus} $colors(-selectfg) \ + ] + + ttk::style element create Combobox.field \ + image [list $I(box-basic) \ + {readonly disabled} $I(rect-basic) \ + {readonly pressed} $I(rect-basic) \ + {readonly focus hover} $I(button-hover) \ + {readonly focus} $I(button-hover) \ + {readonly hover} $I(button-hover) \ + {focus hover} $I(box-accent) \ + readonly $I(rect-basic) \ + invalid $I(box-invalid) \ + disabled $I(box-basic) \ + focus $I(box-accent) \ + hover $I(box-hover) \ + ] -border 5 -padding {8} + + ttk::style element create Combobox.button \ + image [list $I(combo-button-basic) \ + {!readonly focus} $I(combo-button-focus) \ + {readonly focus} $I(combo-button-hover) \ + {readonly hover} $I(combo-button-hover) + ] -border 5 -padding {2 6 6 6} + + ttk::style element create Combobox.arrow image $I(down) \ + -width 15 -sticky e + + # Spinbox + ttk::style element create Spinbox.field \ + image [list $I(box-basic) \ + invalid $I(box-invalid) \ + disabled $I(box-basic) \ + focus $I(box-accent) \ + hover $I(box-hover) \ + ] -border 5 -padding {8} -sticky news + + ttk::style element create Spinbox.uparrow \ + image [list $I(up) \ + disabled $I(up) \ + pressed $I(up-accent) \ + active $I(up-accent) \ + ] -border 4 -width 15 -sticky e + + ttk::style element create Spinbox.downarrow \ + image [list $I(down) \ + disabled $I(down) \ + pressed $I(down-accent) \ + active $I(down-accent) \ + ] -border 4 -width 15 -sticky e + + ttk::style element create Spinbox.button \ + image [list $I(combo-button-basic) \ + {!readonly focus} $I(combo-button-focus) \ + {readonly focus} $I(combo-button-hover) \ + {readonly hover} $I(combo-button-hover) + ] -border 5 -padding {2 6 6 6} + + # Sizegrip + ttk::style element create Sizegrip.sizegrip image $I(size) \ + -sticky ewns + + # Separator + ttk::style element create Horizontal.separator image $I(separator) + + ttk::style element create Vertical.separator image $I(separator) + + # Card + ttk::style element create Card.field image $I(card) \ + -border 10 -padding 4 -sticky news + + # Labelframe + ttk::style element create Labelframe.border image $I(card) \ + -border 5 -padding 4 -sticky news + + # Notebook + ttk::style element create Notebook.client \ + image $I(notebook) -border 5 + + ttk::style element create Notebook.tab \ + image [list $I(tab-disabled) \ + selected $I(tab-basic) \ + active $I(tab-hover) \ + ] -border 5 -padding {14 4} + + # Treeview + ttk::style element create Treeview.field image $I(card) \ + -border 5 + + ttk::style element create Treeheading.cell \ + image [list $I(tree-basic) \ + pressed $I(tree-pressed) + ] -border 5 -padding 4 -sticky ewns + + ttk::style element create Treeitem.indicator \ + image [list $I(right) \ + user2 $I(empty) \ + user1 $I(down) \ + ] -width 26 -sticky {} + + ttk::style configure Treeview -background $colors(-bg) + ttk::style configure Treeview.Item -padding {2 0 0 0} + ttk::style map Treeview \ + -background [list selected $colors(-selectbg)] \ + -foreground [list selected $colors(-selectfg)] + + ttk::style configure TEntry -foreground $colors(-fg) -fieldbackground $colors(-bg) + ttk::style map TLabelframe -foreground [list disabled $colors(-disabledfg)] + ttk::style map TLabel -foreground [list disabled $colors(-disabledfg)] + ttk::style map TButton -foreground [list disabled $colors(-disabledfg)] + ttk::style map TCheckbutton -foreground [list disabled $colors(-disabledfg)] + ttk::style map TRadiobutton -foreground [list disabled $colors(-disabledfg)] + ttk::style map TEntry -foreground [list disabled $colors(-disabledfg)] -fieldbackground [list disabled $colors(-disabledbg) readonly $colors(-disabledbg)] + + # Panedwindow + # Insane hack to remove clam's ugly sash + ttk::style configure Sash -gripcount 0 + ttk::style configure TPanedwindow -padding 0 + } +} diff --git a/TK-Themes/theme/dark/button-borderless-hover.png b/TK-Themes/theme/dark/button-borderless-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..c23f23700331626e7f72f5e8d22f501d65cb4e96 GIT binary patch literal 1819 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VOS+@4BLl<6e(pbstUx|vage(c z14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>L5K7@FrXF>zgg Q)&vR(Pgg&ebxsLQ06kqYjsO4v literal 0 HcmV?d00001 diff --git a/TK-Themes/theme/dark/button-hover.png b/TK-Themes/theme/dark/button-hover.png index 300eb091f6c573a6d7b00313dc264a7ebcc737c0..6a26c54c38fd654604d8cf43e05aef6d5594d0ad 100644 GIT binary patch literal 4693 zcmeHLcT`kY6TizgmMXXuH_I+XfdH{k3}RV8stq9+B1k|)1&I_9DFzl0K@lVrgRudk zh#-qVXwno3ASO}-7D0h!i6BLK-Q~U9Me`-*ub6+nb8>RunfK<-y*qDyGw;pJ+w*(( zn2U>0L;wKdmKG*9@JbetFae%p&nt)nu%hYkSC&UCEj55JlmQ?Ci3AXU0~p8&2w>jv zf(hnNybuNpuy8pP5*G4;y#l?2Kk+i}dBHx6&^tYmkQaK-Tdsf;IE0rEv;*x0D|VP! zn!y_hZVpdq7uXJj2?QbmFH9s7NhDzrF|xRrsHoT~>6MaX1qz*}K%r6-k2qX+sBNC^vU!eW$x zkQ4?hg+Xfo9omVYr-p>TUd7f0My>6H_yD z3(Fl}*zWt%?yLRwhg=UIIqK$q%=e_3yX?NN*`1|uKB69uKr0w%k$Q@c6P^$PEH@U|JT<8gKvf=Ca0!nX6NP? z76rHjIDa4Sko^Uh6vQQj!(nkm0WOS?zW}%t4zIL2$}a-vy8cC{{N&4d8jGP1u1Ec_oK`ya4BaCHJPECvP-D+L%}N~7Q~Qi6iAB~!Xf zBJatBh>lc6XLS~Fm zAh(oONat%gsvyC+RbvrQMJ6^s?k%Fb$hGU+b}^mM$wTI?5RGI+c267%wy}HWMj7*2 zV8o5J`9l$d<2s0fsnK8*ggi$}M@ZM>hn-(k5X&3iUW&5B^6 z&LvnKt5d_A#FU~S6a|CEC6wvw+pVtd%S&h=m?rFUE>-k48j-wxkXc>PRyEM~6yY%u z)lhwho|(r>ojDGO()dhwB9prE33jsyRlXxWCjO=5jwd{FO1IU|P58y(ZFFXR2y=19 zYl)<}6OsBw4GCsUs-Pg&{`oY|QRCE&hIJZdj%SNyxr*F`U_9_EJkLY{JwJqAZ#~P) zT^L5e#kg^n=GW{(eZTB;+|ugU5}G{#Y|uVBflSw3GDq z^V*Jv5$kKzSsCL{5%rsYkH*S3p+NByuX#Bn!XqquwzECW-SfVYPrlwWIhSj$10|`F zyY8bPt^=Ca@8MZqWyCJrRG1ymU)pf}#j;5}JC8q1PLcA?m|QDB)47a>=4eXZi}?pcyu;Tw?535dF(zhv7KQ8%{+fH2 zWzH$)Unr)}EK3d<;(dCgnf;D1m*p11kkHB~+{)D`s4w$Efs+RcQn!LYzmN3Q@4ls_ zk9Q%aU2%&%0oXj&=KpT}pTqxq%>FMg*MqV3r`bvq3TFa>UP>9&tii z%205lY94kiB6l-0+j81PIj?J2)OD{0a7SZ;u7JrQ%}NwR_*%l+Y{iF#jC&xm@VHDy z?v@p*^=wbM)m#n9AdvRanb6Jc`)0?XaU%n-*y6({%)D>SvdaEkcEQ*4{wPr9qhMxQ zkS84uX_w!69-mfm_30vl7aojUE9Q!pzl&^d-;o1C26x2n{vt@GK46b#y)x>ul z-t&^af%#zTaI2;?3J``XpYdI)q)utGpXkn0H%o07jBI*p~G z3z?2x_r@K@VhbX>)AjY=9y{ybO@-Er7xP6?V62OYOC2;wqO_GKI2<=BQ~UV~zFK#g z*Zl)1Xk_pMY`$XFjWFXT^$HECk#{mX-R(5-BbBx>Vb!Cb)mk)yMapeh3swK9g$2v8 ze*|Oybv6ppDo*HPh+VG8P>5M!`PRNqDpV26-iw4&=hCDcRI2#K z=V@(89nYTS?VO8o#nx?oG@Xe8j^i8p)C6pfgYTeVrQLK7Y{xH5AZEpb*d(hc%4V^v zSI2m;wT7*_=5aa_;#D=)$DGh(o6lLbrx;Q{km@q4i<)5xf6YS>HK@%omW-+Ui_H83 zH66|WS{3YhpY+W7QuwA;!q1NLtY<%{y`tL#F5^RwTgghfV@EcQjFO#B)*E>S4uBxG z-GNyc3?&j%vLCkC)~&Bw?yac^JLK+Ciwli^g3Y59h6#FeJ3((w=W$RlpVcy<#t&Uv z)k|NL&t;^FhA2+py9+{+<)o@vc{m|GMQ7>LiNpJy+?l2~2bP={ZFMo|3y`FhO@tq< zxT8k9jR44t6XhSo!#T#+#@rb5;)xa$P81JW*z5)%NEQBt5dpv=6on1~;I|%tA!h&# zE(0LveeHqu7Pvrg*=cS9P{EN}aVHTg2s^BN#Qk*D|$sMd!3wxIUBy|@wXV;dTwxIyPv}A zz)064ZaH3QCK35soNH(9w`Xi=Y%cmND=XY)hJ-vIn40FVFx delta 320 zcmV-G0l)s$B-#RyBYyx1a7bBm0001F0001F0eF%1O8@`>8FWQhbW?9;ba!ELWdL_~ zcP?peYja~^aAhuUa%Y?FJQ@H10Ov_WK~y-6?aVRGMlb*d;1>gR0mddsT5FFX2JT}2 zXD6^Yfy8Ni=_0AsW|3AR`t9HJi`8?0#}PuV+=~EM;QPprI6=2 zT;KO$jCmXyV-N%Z+{e?8H+;i4{8xA!2M8gLqc9AiwT3ID1f}$GNGZkV^MQAs=U-Wt z@H`LuzT-U4TR9OS1X-3LNfLBj2S*5DqbNdERp6W>2!dOoF$U8#VHgH%+lDXjwOQ;; S_{X*Y0000mBaj8c42%#qh{K4)W@2P!UKT( zFjACJG$I-NKfoZ!0df;FqY?v?AS1INnAuRebI{N?Mn?>~P20{IK%PZ)ss49#DHKz}i@urRZ*gZ#zF zR1WgEAPcLaA)An6AbVn=u#!j7{Xt-7Jbqe#NB+!Jt;;jT(s>n5GKJDK`*_iB0kd;i#f0S768gs!$AX))9EGj>-_X)rA68pWewKxP`4 zH*vZoOVCf=R~k%KWTt9RZcuN2C%@J^eK@{ z3dtTpz6=aiYQPG;g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V043Oxyxmm^=Q>w06>Oe4Q_yL_ zlt;{Uy@n?&e>XB{s>WY9Q{#BOo!#aE<9{`!eF^XH@{0(Dl*)?;UW?jtjiG|E?xM{3 UcbC6d11)9nboFyt=akR{0D^7zuK)l5 delta 215 zcmV;|04V>D67m6%BYyx1a7bBm000id000id0mpBsWB>pF8FWQhbW?9;ba!ELWdL_~ zcP?peYja~^aAhuUa%Y?FJQ@H10DnnDK~y-6?bR_310f7V(VvhOi31=CdQP`D2DffZ zZEd;+-5dq-8*2G-p%GeqR`0^X1wE5stG Rj>7-|002ovPDHLkV1oYxR!IN= diff --git a/TK-Themes/theme/dark/combo-button-focus.png b/TK-Themes/theme/dark/combo-button-focus.png index e37db17e06b3777da5254f7bb80c8101d6204ce3..5df1b68db7c14644b4622712ecb7b07195401cc4 100644 GIT binary patch literal 3097 zcmcgucTkf_6n|fOAx1EfGDs*Y2#zR4z!3sSfLI9@lu@yQ!kkj96ay%h9EzNJ_7ejt z7IZk}1WyF4SWr=la@;`#1mOgPa0w9d-F}uk^q-TPk^Sbk-`n?gcHeLJy*IndZ>A52 zWyAsij@Z}BAN_d*7&O%H-Zg>)z^Yw2UmPqJTLS~>0EQqiK?@YXkVF8m4>B>p`pG1W z3}j@EM<64am`kin>nHO+%EUa3^kJRtNG5%h0}0nqW4!@QI9>14$Pn>tgtA5FkIP z*!%W@3PF@iq0;CKCX0ihx zEIhM|`2MBsBkh+(CNf#W^$iS-Mvb<#8e{F?IMK=3WzrNck++Ypc-L?y_loa7c=o)kyrS~O%PPgIy84FKjZJTw-*t2v?a= z%p_N?lFNFxc8tGhvlxfH<@Ypn96b0{mHbQ6;?O!R8HY4k$7N})ZBXe6pIgGVNF3Oj z(xW0?z+*uqPa=Y^g_~_x;)QbesmJzQX>&wud;F-bv$SpjeMOoQ|16i(;P7WUdnZWx zj@Y(tIUVmhNoI8^S7^a{mDASEStu=(Ds>lSMFgre+b;@hg*}W*HcnbnSD&FW)?TZ! zZ7(P>ydn|BDpY17o*y<4T)Ap0X}EeyEcjisT8T9wI&nqa1_Ax~zYUXB7SuaN;DF)q zRJ3_PLA(B?rYGr&6RJFEl6F-Iy68r39?MD|KM)ujWEP(4;ivFQ`;3(o7txfK6GsGe0pgQPvauxD2ymzl$W(5NTxwL7J;_OpAM!TX+3g6<* z|LhEZ4eS?Ci|4J?P+NNJo75qFtw9Ru5qp#j-M3mjWmajV0fOuEjkEoWYJfE<2QN~I zsCG3Otc*n2OHW6Ut)ka2{j6N(d|sp)f^jHZT#)XTvR(Q|gI2#geIj!4m|MM-Tm}Qh zU}vB*Ik(vSVDVasyUC70%S6&9H$_ib&a6i(6f>!|$1PO_Q$ZOzSfz)BEl;R8-XK&- z1I=-mZ(RZ*k6PGCQCpMCq^rK~tvQ)dhC^M0v|8|}+#0%wV)JcFqMO5z7cOt6pEd1m zeB;jT&@U^~i`_G49Y6Bi3~gQ}$@1_?&t}Y`Lau#&v^QJpqglO1SmvbAH1CFKli!9b zs=@sppO1nSe>w5-O*wkRP(nOrcmQOlur*7mXpBYq`*>n6?~j$Df$4Hz{}}+$qtTOg z8$b_I#Ww-09}m#H1Ypu30R8Y|*CdmXfwpX#j~C#?mzIBKAJQD zH#N&(?-fR_$+um>KD5N?aSKTu%his#TWmm{OI^~qGT57u;4kBDs*JI0{F6?~*dOa* z-$`907#E(vjyoLs C3X@v^ literal 4312 zcmeHKeQ*ek+D2@3Ji6I^lP=9yv)d#s zh){YQA9jRR9R-D!E8+omm=QP*@F*8P=&Q!p6H*IN0XKp%k z{?}wSyZgM)^LwA?_x|2z@~(H}FGyDZQjH);vMtY22=DjH*Q5maTetqfWO$2JJBy`4 zHi8C20k_}=-Z5NY3rq3k#%#gm53Mq z`9ytv?O$zzb%%HIM~0+N){+JL3kv?DomO7gn{ns1F!6iDdZDCaX673m2r{l#$jNco za&iXCfknLe!e(<`?8)?#ON*>CU#$tJR(#-iYj&5at9Xy2R=smc*~R1C9}{ICZ)!ed zP`6A}Wl!CcqB(b%Ii#-XRIPh&O~a0juk;;j{s=p@=JSPX-3L>_06f<(_Wq?&Ffmw(xy39pe-v!MA8=rUIi`f>AB-K7SC5>{3njwiBos%U)KD3Ui-?9 zSax?`QFr~BrxP+ykKgUcFs{6w-S>}oOJ3h1HPloz_MbeMox5t=^Nl5cxYon{-MgP75k8AREb{&5A%<|SNDP&*sqP5+5E4R#VLXK{~pue(e^>gUH zFM2=y?DSXnY-(z$*S8+eAfIjirt;;;&2VpT&l^i#%%mHOWUUdi*Rp&do z>T=G=W7%`nrYHjed_ZE+sL$&cnW!04a2fb4n+Xh6T%>X{R%~~mIe`#BwHmF4#H~>w zOk;D^s42v|nLiD)8Onn1`yP)4JXAZdc8ap-}IRep($;(jqx zhKOTWfXIb}pdg)JM|cm`t~f(4yPdHFxJo%ao5hUD^D}&a z6L>~>)UtY)-av6UMd@f<%jxvELGRMxyxZk+xeacLBlW|eY<^K<{Tz^?Ah@&bf^o zt_9>A+`w}r&S^=GXL+NJ*Ha1<&oQ}ykdKASDfn0qAcB66G9VMq%yZbx7_A}iS{zD>K_LShSjNTn^3O-OIu`-*Ko;K2Y5@t&qDXli1vx2t-ghZ%B8IvM41J%gO!oXr6 zv8=392%x~iT9}*=V5LCF83=gIm<)l+kwe3FxSe=bVlAu$ASg*|8H!{mgOf5ab4Vsj z_c%#2yVH@9%1Wmc(FQiHIO6G5H#II`9q; zjVj4zx2nEW-r0GEG18UIeBgBisRSt?VX9YGt1n6YV1ESWlHwGo9EsXds??l+r44kieI-* YpF!a#jxYYj5||BQv*ue`=9kv|02wGE0ssI2 diff --git a/TK-Themes/theme/dark/combo-button-hover.png b/TK-Themes/theme/dark/combo-button-hover.png index 493cf52b129a7d6bbcf9202109873bfef1ab7b91..8a8d0bea0b2df37a07b7e0b4c64b5f7ae457f662 100644 GIT binary patch literal 4086 zcmeHKc~lcg8m~@5E{FlS1VK(gK~W$of)Z|sjsg({MMS`BP((q2fpIz_vf>DcpeQn+ zqJ}dJBMcgqaIL6#jK_e$jDSG_1v%tMAnD$2o!xbPJMWFWxBHjX@7Mj+SJhwreqUF0 zcO`kPc4yGF=>Px*$HRq-UDa?<$=EqLNtXe@w2ZBOoNXMA8K7c5td4;O5I_PDX5j$P z2OF}mLLSfRc@&}V1|P+sB2 zal;0}2ggom8*m0xGMPeFpi(Fl8jVUG>C)vkR?94`Syp%uh(@C+DJsoiFlJa8=onaic0sFw3Ki!>gbV>e z1tO|IXg$!wcq%~e%LggAP$EfzOrg@~idcsVWq@UhNFWgv6i6hj^#IlmNGb}`4J;kW zs@_2q!@X)&2h+||jhxDA)VYrajje+t;%RgZ%^6zSvrSCr%r#>zTD-(&sjah%tDCzA zXT=(ywd;KS)^7;evUS_`9bbn=?%N*~9rI1>p@hSUe>;+N^hA2b$y1r9&tzT5yLjm` zKfj>xrz_FV8h$r2IyNqm zPT;z5o&PK!lzpO01=B?!k%%M;t_vbW+s>5kr%puMVwRtKqSPHE@MYG_8* z+(Gr=h(~k{V^-(vAza#fWq(ar{FIdaOW414wE`s~ggrc>3SfhgyXGk@8Q{Le+l$|%aLs%KOY4RLKIZ7(*)6o zhD90*?3>%iYvCcE9$66o4Pz`WX7|ab;U=zLmQSweZ2;FdZn};FgQ8Rk6Nxu3n%o8d z4&PoE)}A=9$UpODyr0HWOJ1L2N63%%8BqP}+~H}NgGlhT){y}JnyjO}>8guL2T`C3 z$G}%MHpmQpQSh#{4Vef>On3`-6vd|eu=vcLAMf41cjtzh@v$u_;?_bha)p|=gTm(^ zEG7hT;=;|UvZk`oIR9&Xm#qA&8jQZSp`>FCcK!Lb%(+aY(P7rvViepqfibBG=IMnwdP8J>@y@6*&2jtv<<~3ur;4)Y z8XbpTD@38-St~4?M1i;;VL@H9=A+xOVny%5vi zEOjvI2no%RjtUMW3pGo)XsqxVuCo zA8GG&(9NtXm1@3azv;#2s_>d8)otGa6aTnl*5xm2Qqz(P?Zl5OQBZy!>B~KiEmbf? zpL2mX6|l;gQUNvt z&Dys{`g-NS4rr0)Z(CoHl?G`N0D0HC&0f1P&Eh#yAJ$7#K&{9Urj|Wy-UJ zt-a-?QnE7&2*@^`%>t$b_IXs%c);1KVmK`L_bN|Ie=TkvkMr6!n%x!~EtA3GWJGNz zJWR<&h$uKu7xxhO$@_O|HU*j6ySFq;W=`Jk-`G9&L#}KL`{;T~e7^hmGr@xT^#)7I zVX0Jv0#OnQ>K~zi-sX>F6w8aE`>FGjo0>yh!QS>Sf&L?L|I-|?2LhoUT1zSn$`gLMz_6L8X)#qNat658c{c~&+<5TF|QINZCNN{mt%iYZtHEoY(PS(i_ zU$HyqV>2XYar<~9oXo-I?`_+_I_c5w9faq3`S%NcoA<=b+-w&F5w%ROjTdHkJLsV; z&YWOAw(%fscUcL6AVoV&?S$2_z>9_u5qEpHtTs3AOm3+ANkyft|9 z&k2imL-L~U2Y_eQ+clF_@KwK^$z1vyVMLB82+g|Os9(KMY2?7epTlAX1`dg`Bk#St zr+7X^T)n}ZV$m4iv|$>lN4Q#pG;0t-nZ*@%4~lJ0M4lohTP7&Stej_kOF6{&Qi3oN js#q8CAVJwMzCV_|S*E^l&Yo9;Xs z0002CNklB!{`d8a|Fo>f(tpA1DL|b&PLNq1PgJ3_yg}%E}*F% zo&mn{-k|HcFE`t^jcJ;w>zZL000_#mybXq7NRlLESw`EoR8>WI7jXkP&y#tcS=W`K zC>Y0)&lB)!-*@`HC(m;~Ai%OLq-p98JdT4nj{SjGFZhCg1qvZ>&iMnSlvr#1fKe2o zltOF$Y!8JHNGVZD(KHRl7=kAk;GDx+i`E)r3;;ihzDaBS*gaGL0000B> z)Ptvs-FtZ4|NT#2pp=jj@%@Kk^Nb!IX43=n@9$^4*TMTzYtzaSpjHM?S3j3^P6!3HD`Pv18eNL6{dIEF|_u05#8)#4!0aPhr- z;O3LkH(2u%#E!h+WZ5XO?L8x#S%uhSr5n0w{R&NH&4=$fKC^YS&h< ziIVR7QZ={4x(8mrv0?3MgS+PIo+ox1*zIl{yc9^v6MuBX*K#St8_nnUe#}E$LWFAh=n@blgcyP*r z^~1}{%iViaRaO5>uHcZkeEG8c=TDzb83Zu?`ThO9Im5+oe23HmeBJ;xGkCiCxvX!3HD`Pv18eNY#0|IEF|_CbKZ5v9q_wF*7&w zq@|^mu^Aos4+OSVUozfL(~VvvF?a6VC?HAD;Vnj{P@^6vAf&b#=@dv_KqDp6q%Wsm6>Ng`2GET f{gTe~DWM4f!$(Cf literal 0 HcmV?d00001 diff --git a/TK-Themes/theme/dark/rect-basic.png b/TK-Themes/theme/dark/rect-basic.png index 8ab4d10596f4e12fe75320bc644dc7b8c95090ed..461f5074d32e1405f5961fb75509a01f20424408 100644 GIT binary patch literal 2476 zcmeH}dr%Wc9LIl`TyjYW0+OHtF%VEOMJo^$6(u}ka!^zvAZkY?fC@AC0I81=67hl1 zDn_&gwNtPKk*Qihi&|g!0I|qJ0hKWI0c{j3g+{PEuX|!!r+-=g=|BEN<$gIa%227($^znK+A0aJW1(G~tXTpeMy-;7k?^$I)mK8VB5pHPX?|hix4kK}gmM z+_&j-IZnPsWkPjbhqH$!K84G(88v#0?YQw1Tqa6oQ>RV$oH5hSUolsyA_EqNgoZ5& zU%VtTDthIr)iJRN8xlX+xM}m2?K^hvO5L57zCZK8!Oy?Q%06`T>u>V%j};s*EG{{H z=KIpK=gwcfcKt?q#m&lFckb3VG~T=apy~0Gme!wtF+P3P*7>{XWmosBKYDs;E}HYN z7$W-@mlfh-;5ZW}XfBMgkp{QIS&nY(kv_ph#CmIq`!#jcLPfq7TMom|8O+{pNXND$Fu@(FiH1|FC`z?JgH5piik7n@90EJZM-{; z;+Fo~(LLsE(t*>@`DS(uRn7bp5Ppt=1rJkAg~F9fckGwsOq+iqEQgWq@@_h1&=xGO z=xN}U2(KzF)pkyIbmAlm#>OX$tHNf-G*_3%>k1r>B=$B~I9^mh=;7Zo@|0oYcb4u| z24qyO4VGJn>`OAeJTd<}0|hnS{hR6+8WcSCo+)I-Lb+wILIA@MwoH3z&OuR3S)AbJ z68}m<6cpHPr|mIPkYNkjCe0uPPh;)U)T%3Cl{I-`M|C`x;mOr-OJD9cZA6lE?dcl> z6x25GT;OQ>d%b@K|KlAvHE`&|_T>EBvuRGB2|u>)t!2dy^M3QBw=a;+QN^vs#{53n z^5%gc@OaTkf$1&d9A^dC{Py9zeme^k(!~!B_bN z`2ZAUnDs}nP#;TBD}AvCm9ARUafno@g8;USM?V=m0D4hM_Y@#;3P9TmfSFkUqt+cc zAMAw&*qT74KTveZxp*uSWw`59ixW^AMGM=c?+QeQ*gys;h-btYi&+k9CVwkIsd&=g zC&cr|7u7{vrW;>gC(aBgsE4Mqz6?z*#PUMFEdKY2@1e#p#juB_V4 zDNHZjol{uqrmOM~#a6dhpKSiJyY<(5F_8&`*CUL=WhHT0*>w_)oo9JYsPJB5XKQ^` dRzh*(6SJVLE{CsW>dVpYKq}_>pY&ak@+XfhLizvz delta 259 zcmV+e0sQ`~6P^N)BYyx1a7bBm0001F0001F0eF%1O8@`>8FWQhbW?9;ba!ELWdL_~ zcP?peYja~^aAhuUa%Y?FJQ@H10INwvK~y-6?a;xEgD@0D(HnoSyuyeEa0$?V2gn`Z z0zkq$O9+2uHWMkU(U7p@7I38Z9^*JZopXc`@ZKXLoJm#5Iee2+qLhMl&M^!F*4k6h zD-ogVI+~^-#)t_ae2l$kt)=gKjQ9R)>{Z*gn6sb#m55+2(|)_b8@$1PfvS2LR%^xN zoG$~nZNsFLsI`8L9ml~u&zMpQF-F#P<&*iU%Cam>)5N~-`~Y{1KV3pWf0zIO002ov JPDHLkV1gx3a)|%{ diff --git a/TK-Themes/theme/dark/vert-pbar-small.png b/TK-Themes/theme/dark/vert-pbar-small.png new file mode 100644 index 0000000000000000000000000000000000000000..62d86031b026c5233891c65e5f4723ec1a8b0220 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!{!3HEfez(s7QgNOxjv*3~x(5vfnHU+E4|a2E zyZD@KlSIFagHH+Sohq%IogGm(Q@V VxwFD)QyS1F22WQ%mvv4FO#rjfGqL~x literal 0 HcmV?d00001 diff --git a/TK-Themes/theme/dark/vert-pbar.png b/TK-Themes/theme/dark/vert-pbar.png new file mode 100644 index 0000000000000000000000000000000000000000..ee6f9294418e42284adeabe593d9ed899fd939d4 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol+0V3C3^0@(|mUy~2hDb=}9#rHy#30f3@cZo< zcc1XSX)=!xJMw~)WuwF!xrBrpk<-+g{#;G^#-Ws9d?H=+=X`gO)RW6HXRHsK5_@!#xLhvn jQ5T+2aqs<`w9WeR4bHdfG9I`C-OJ$V>gTe~DWM4fu{l}c literal 0 HcmV?d00001 diff --git a/TK-Themes/theme/dark/vert-trough-small.png b/TK-Themes/theme/dark/vert-trough-small.png new file mode 100644 index 0000000000000000000000000000000000000000..12c4da68fd9928954fbe21b5e1f095f55836293d GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!{!3HEfez(s7Qi+}}jv*3~x(6KvoeUYA54t$W z7Oaqzx#G-gQ+k4teXr5wKi*|~ul+h>dH?yG^^GfdTv8RZm;)s{PC10IEiw|AibLq> h-tYN6A9sEKC-42#>|Uw7%|W1L44$rjF6*2UngCpKG!Os) literal 0 HcmV?d00001 diff --git a/TK-Themes/theme/dark/vert-trough.png b/TK-Themes/theme/dark/vert-trough.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9819644a6d43635d179db859b02e05abc2a9ae GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol+0V3C3^0@(|R(rZQhDb=}9^B~L${^DEuvj5# z535EbqnX0OZAvD72}!O$u5T#j(@I+EZNa2_Oibs@)lW~K*3JJvHTL>m6W`AvB1i9T z%awn<%Wl{E-`BV0&M!^9|J~pJ@|WOgPxt0YaH#UM2(dYFGB0dt3^?SVk*F}mK)?$_ z_+jO|`dsl{4+~}Pzuxt(^r_AH{CK_TSrTpASFMWjwCj7E9XYMtzU!9LG`s!mEkI{8 Nc)I$ztaD0e0sx3WSx^7~ literal 0 HcmV?d00001 diff --git a/TK-Themes/theme/light.tcl b/TK-Themes/theme/light.tcl index dbd6dad..2e7b8bb 100644 --- a/TK-Themes/theme/light.tcl +++ b/TK-Themes/theme/light.tcl @@ -1,539 +1,623 @@ -# Copyright (c) 2021 rdbende - -# inspired by rdbende modified azure to water by Désire Werner Menrath polunga40@unity-mail.de 2024 - -package require Tk 8.6 - -namespace eval ttk::theme::water-light { - variable version 2.0 - package provide ttk::theme::water-light $version - - ttk::style theme create water-light -parent clam -settings { - proc load_images {imgdir} { - variable I - foreach file [glob -directory $imgdir *.png] { - set img [file tail [file rootname $file]] - set I($img) [image create photo -file $file -format png] - } - } - - load_images [file join [file dirname [info script]] light] - - array set colors { - -fg "#000000" - -bg "#ffffff" - -disabledfg "#737373" - -disabledbg "#ffffff" - -selectfg "#ffffff" - -selectbg "#007fff" - } - - ttk::style layout TButton { - Button.button -children { - Button.padding -children { - Button.label -side left -expand true - } - } - } - - ttk::style layout Toolbutton { - Toolbutton.button -children { - Toolbutton.padding -children { - Toolbutton.label -side left -expand true - } - } - } - - ttk::style layout TMenubutton { - Menubutton.button -children { - Menubutton.padding -children { - Menubutton.indicator -side right - Menubutton.label -side right -expand true - } - } - } - - ttk::style layout TOptionMenu { - OptionMenu.button -children { - OptionMenu.padding -children { - OptionMenu.indicator -side right - OptionMenu.label -side right -expand true - } - } - } - - ttk::style layout Accent.TButton { - AccentButton.button -children { - AccentButton.padding -children { - AccentButton.label -side left -expand true - } - } - } - - ttk::style layout TCheckbutton { - Checkbutton.button -children { - Checkbutton.padding -children { - Checkbutton.indicator -side left - Checkbutton.label -side right -expand true - } - } - } - - ttk::style layout Switch.TCheckbutton { - Switch.button -children { - Switch.padding -children { - Switch.indicator -side left - Switch.label -side right -expand true - } - } - } - - ttk::style layout Toggle.TButton { - ToggleButton.button -children { - ToggleButton.padding -children { - ToggleButton.label -side left -expand true - } - } - } - - ttk::style layout TRadiobutton { - Radiobutton.button -children { - Radiobutton.padding -children { - Radiobutton.indicator -side left - Radiobutton.label -side right -expand true - } - } - } - - ttk::style layout Vertical.TScrollbar { - Vertical.Scrollbar.trough -sticky ns -children { - Vertical.Scrollbar.thumb -expand true - } - } - - ttk::style layout Horizontal.TScrollbar { - Horizontal.Scrollbar.trough -sticky ew -children { - Horizontal.Scrollbar.thumb -expand true - } - } - - ttk::style layout TCombobox { - Combobox.field -sticky nswe -children { - Combobox.padding -expand true -sticky nswe -children { - Combobox.textarea -sticky nswe - } - } - Combobox.button -side right -sticky ns -children { - Combobox.arrow -sticky nsew - } - } - - ttk::style layout TSpinbox { - Spinbox.field -sticky nsew -children { - Spinbox.padding -expand true -sticky nswe -children { - Spinbox.textarea -sticky nswe - } - - } - Spinbox.button -side right -sticky ns -children { - null -side right -children { - Spinbox.uparrow -side top - Spinbox.downarrow -side bottom - } - } - } - - ttk::style layout Horizontal.TSeparator { - Horizontal.separator -sticky nswe - } - - ttk::style layout Vertical.TSeparator { - Vertical.separator -sticky nswe - } - - ttk::style layout Horizontal.Tick.TScale { - Horizontal.TickScale.trough -sticky ew -children { - Horizontal.TickScale.slider -sticky w - } - } - - ttk::style layout Vertical.Tick.TScale { - Vertical.TickScale.trough -sticky ns -children { - Vertical.TickScale.slider -sticky n - } - } - - ttk::style layout Card.TFrame { - Card.field { - Card.padding -expand 1 - } - } - - ttk::style layout TLabelframe { - Labelframe.border { - Labelframe.padding -expand 1 -children { - Labelframe.label -side right - } - } - } - - ttk::style layout TNotebook.Tab { - Notebook.tab -children { - Notebook.padding -side top -children { - Notebook.label -side top -sticky {} - } - } - } - - ttk::style layout Treeview.Item { - Treeitem.padding -sticky nswe -children { - Treeitem.indicator -side left -sticky {} - Treeitem.image -side left -sticky {} - Treeitem.text -side left -sticky {} - } - } - - - # Elements - - # Button - ttk::style configure TButton -padding {8 4 8 4} -width -10 -anchor center - - ttk::style element create Button.button image \ - [list $I(box-basic) \ - {selected disabled} $I(box-basic) \ - disabled $I(box-basic) \ - selected $I(box-basic) \ - pressed $I(box-basic) \ - active $I(button-hover) \ - focus $I(button-hover) \ - ] -border 4 -sticky ewns - - # Toolbutton - ttk::style configure Toolbutton -padding {8 4 8 4} -width -5 -anchor center - - ttk::style element create Toolbutton.button image \ - [list $I(empty) \ - {selected disabled} $I(empty) \ - disabled $I(empty) \ - selected $I(rect-basic) \ - pressed $I(rect-basic) \ - active $I(rect-basic) \ - ] -border 4 -sticky ewns - - # Menubutton - ttk::style configure TMenubutton -padding {8 4 4 4} - - ttk::style element create Menubutton.button \ - image [list $I(rect-basic) \ - disabled $I(rect-basic) \ - pressed $I(rect-basic) \ - active $I(button-hover) \ - ] -border 4 -sticky ewns - - ttk::style element create Menubutton.indicator \ - image [list $I(down) \ - active $I(down) \ - pressed $I(down) \ - disabled $I(down) \ - ] -width 15 -sticky e - - # OptionMenu - ttk::style configure TOptionMenu -padding {8 4 4 4} - - ttk::style element create OptionMenu.button \ - image [list $I(rect-basic) \ - disabled $I(rect-basic) \ - pressed $I(rect-basic) \ - active $I(button-hover) \ - ] -border 4 -sticky ewns - - ttk::style element create OptionMenu.indicator \ - image [list $I(down) \ - active $I(down) \ - pressed $I(down) \ - disabled $I(down) \ - ] -width 15 -sticky e - - # AccentButton - ttk::style configure Accent.TButton -padding {8 4 8 4} -width -10 -anchor center - - ttk::style element create AccentButton.button image \ - [list $I(rect-accent) \ - {selected disabled} $I(rect-accent-hover) \ - disabled $I(rect-accent-hover) \ - selected $I(rect-accent) \ - pressed $I(rect-accent) \ - active $I(rect-accent-hover) \ - focus $I(rect-accent-hover) \ - ] -border 4 -sticky ewns - - # Checkbutton - ttk::style configure TCheckbutton -padding 4 - - ttk::style element create Checkbutton.indicator image \ - [list $I(box-basic) \ - {alternate disabled} $I(check-tri-basic) \ - {selected disabled} $I(check-basic) \ - disabled $I(box-basic) \ - {pressed alternate} $I(check-tri-hover) \ - {active alternate} $I(check-tri-hover) \ - alternate $I(check-tri-accent) \ - {pressed selected} $I(check-hover) \ - {active selected} $I(check-hover) \ - selected $I(check-accent) \ - {pressed !selected} $I(rect-hover) \ - active $I(box-hover) \ - ] -width 26 -sticky w - - # Switch - ttk::style element create Switch.indicator image \ - [list $I(off-basic) \ - {selected disabled} $I(on-basic) \ - disabled $I(off-basic) \ - {pressed selected} $I(on-hover) \ - {active selected} $I(on-hover) \ - selected $I(on-accent) \ - {pressed !selected} $I(off-hover) \ - active $I(off-hover) \ - ] -width 46 -sticky w - - # ToggleButton - ttk::style configure Toggle.TButton -padding {8 4 8 4} -width -10 -anchor center - - ttk::style element create ToggleButton.button image \ - [list $I(rect-basic) \ - {selected disabled} $I(rect-accent-hover) \ - disabled $I(rect-basic) \ - {pressed selected} $I(rect-basic) \ - {active selected} $I(rect-accent) \ - selected $I(rect-accent) \ - {pressed !selected} $I(rect-accent) \ - active $I(rect-basic) \ - ] -border 4 -sticky ewns - - # Radiobutton - ttk::style configure TRadiobutton -padding 4 - - ttk::style element create Radiobutton.indicator image \ - [list $I(outline-basic) \ - {alternate disabled} $I(radio-tri-basic) \ - {selected disabled} $I(radio-basic) \ - disabled $I(outline-basic) \ - {pressed alternate} $I(radio-tri-hover) \ - {active alternate} $I(radio-tri-hover) \ - alternate $I(radio-tri-accent) \ - {pressed selected} $I(radio-hover) \ - {active selected} $I(radio-hover) \ - selected $I(radio-accent) \ - {pressed !selected} $I(circle-hover) \ - active $I(outline-hover) \ - ] -width 26 -sticky w - - # Scrollbar - ttk::style element create Horizontal.Scrollbar.trough image $I(hor-basic) \ - -sticky ew - - ttk::style element create Horizontal.Scrollbar.thumb \ - image [list $I(hor-accent) \ - disabled $I(hor-basic) \ - pressed $I(hor-hover) \ - active $I(hor-hover) \ - ] -sticky ew - - ttk::style element create Vertical.Scrollbar.trough image $I(vert-basic) \ - -sticky ns - - ttk::style element create Vertical.Scrollbar.thumb \ - image [list $I(vert-accent) \ - disabled $I(vert-basic) \ - pressed $I(vert-hover) \ - active $I(vert-hover) \ - ] -sticky ns - - # Scale - ttk::style element create Horizontal.Scale.trough image $I(scale-hor) \ - -border 5 -padding 0 - - ttk::style element create Horizontal.Scale.slider \ - image [list $I(circle-accent) \ - disabled $I(circle-basic) \ - pressed $I(circle-hover) \ - active $I(circle-hover) \ - ] -sticky {} - - ttk::style element create Vertical.Scale.trough image $I(scale-vert) \ - -border 5 -padding 0 - - ttk::style element create Vertical.Scale.slider \ - image [list $I(circle-accent) \ - disabled $I(circle-basic) \ - pressed $I(circle-hover) \ - active $I(circle-hover) \ - ] -sticky {} - - # Tickscale - ttk::style element create Horizontal.TickScale.trough image $I(scale-hor) \ - -border 5 -padding 0 - - ttk::style element create Horizontal.TickScale.slider \ - image [list $I(tick-hor-accent) \ - disabled $I(tick-hor-basic) \ - pressed $I(tick-hor-hover) \ - active $I(tick-hor-hover) \ - ] -sticky {} - - ttk::style element create Vertical.TickScale.trough image $I(scale-vert) \ - -border 5 -padding 0 - - ttk::style element create Vertical.TickScale.slider \ - image [list $I(tick-vert-accent) \ - disabled $I(tick-vert-basic) \ - pressed $I(tick-vert-hover) \ - active $I(tick-vert-hover) \ - ] -sticky {} - - # Progressbar - ttk::style element create Horizontal.Progressbar.trough image $I(hor-basic) \ - -sticky ew - - ttk::style element create Horizontal.Progressbar.pbar image $I(hor-accent) \ - -sticky ew - - ttk::style element create Vertical.Progressbar.trough image $I(vert-basic) \ - -sticky ns - - ttk::style element create Vertical.Progressbar.pbar image $I(vert-accent) \ - -sticky ns - - # Entry - ttk::style element create Entry.field \ - image [list $I(box-basic) \ - {focus hover} $I(box-accent) \ - invalid $I(box-invalid) \ - disabled $I(box-basic) \ - focus $I(box-accent) \ - hover $I(box-hover) \ - ] -border 5 -padding {8} -sticky news - - # Combobox - ttk::style map TCombobox -selectbackground [list \ - {!focus} $colors(-selectbg) \ - {readonly hover} $colors(-selectbg) \ - {readonly focus} $colors(-selectbg) \ - ] - - ttk::style map TCombobox -selectforeground [list \ - {!focus} $colors(-selectfg) \ - {readonly hover} $colors(-selectfg) \ - {readonly focus} $colors(-selectfg) \ - ] - - ttk::style element create Combobox.field \ - image [list $I(box-basic) \ - {readonly disabled} $I(rect-basic) \ - {readonly pressed} $I(rect-basic) \ - {readonly focus hover} $I(button-hover) \ - {readonly focus} $I(button-hover) \ - {readonly hover} $I(button-hover) \ - {focus hover} $I(box-accent) \ - readonly $I(rect-basic) \ - invalid $I(box-invalid) \ - disabled $I(box-basic) \ - focus $I(box-accent) \ - hover $I(box-hover) \ - ] -border 5 -padding {8} - - ttk::style element create Combobox.button \ - image [list $I(combo-button-basic) \ - {!readonly focus} $I(combo-button-focus) \ - {readonly focus} $I(combo-button-hover) \ - {readonly hover} $I(combo-button-hover) - ] -border 5 -padding {2 6 6 6} - - ttk::style element create Combobox.arrow image $I(down) \ - -width 15 -sticky e - - # Spinbox - ttk::style element create Spinbox.field \ - image [list $I(box-basic) \ - invalid $I(box-invalid) \ - disabled $I(box-basic) \ - focus $I(box-accent) \ - hover $I(box-hover) \ - ] -border 5 -padding {8} -sticky news - - ttk::style element create Spinbox.uparrow \ - image [list $I(up) \ - disabled $I(up) \ - pressed $I(up-accent) \ - active $I(up-accent) \ - ] -border 4 -width 15 -sticky e - - ttk::style element create Spinbox.downarrow \ - image [list $I(down) \ - disabled $I(down) \ - pressed $I(down-accent) \ - active $I(down-accent) \ - ] -border 4 -width 15 -sticky e - - ttk::style element create Spinbox.button \ - image [list $I(combo-button-basic) \ - {!readonly focus} $I(combo-button-focus) \ - {readonly focus} $I(combo-button-hover) \ - {readonly hover} $I(combo-button-hover) - ] -border 5 -padding {2 6 6 6} - - # Sizegrip - ttk::style element create Sizegrip.sizegrip image $I(size) \ - -sticky ewns - - # Separator - ttk::style element create Horizontal.separator image $I(separator) - - ttk::style element create Vertical.separator image $I(separator) - - # Card - ttk::style element create Card.field image $I(card) \ - -border 10 -padding 4 -sticky news - - # Labelframe - ttk::style element create Labelframe.border image $I(card) \ - -border 5 -padding 4 -sticky news - - # Notebook - ttk::style element create Notebook.client \ - image $I(notebook) -border 5 - - ttk::style element create Notebook.tab \ - image [list $I(tab-disabled) \ - selected $I(tab-basic) \ - active $I(tab-hover) \ - ] -border 5 -padding {14 4} - - # Treeview - ttk::style element create Treeview.field image $I(card) \ - -border 5 - - ttk::style element create Treeheading.cell \ - image [list $I(tree-basic) \ - pressed $I(tree-pressed) - ] -border 5 -padding 4 -sticky ewns - - ttk::style element create Treeitem.indicator \ - image [list $I(right) \ - user2 $I(empty) \ - user1 $I(down) \ - ] -width 26 -sticky {} - - ttk::style configure Treeview -background $colors(-bg) - ttk::style configure Treeview.Item -padding {2 0 0 0} - ttk::style map Treeview \ - -background [list selected #ccc] \ - -foreground [list selected $colors(-fg)] - - # Panedwindow - # Insane hack to remove clam's ugly sash - ttk::style configure Sash -gripcount 0 - } -} +# Copyright (c) 2021 rdbende + +# inspired by rdbende modified azure to water by Désire Werner Menrath polunga40@unity-mail.de 2024 +# Update add New Style TButton.Borderless for Buttons without edge and without rounded corners by +# Désire Werner Menrath 28-07-2025 +# Add Update Progressbars Round ends on Horizontal and Vertikal + add small bars +# Désire Werner Menrath 30-07-2025 + +package require Tk 8.6 + +namespace eval ttk::theme::water-light { + variable version 2.0 + package provide ttk::theme::water-light $version + + ttk::style theme create water-light -parent clam -settings { + proc load_images {imgdir} { + variable I + foreach file [glob -directory $imgdir *.png] { + set img [file tail [file rootname $file]] + set I($img) [image create photo -file $file -format png] + } + } + + load_images [file join [file dirname [info script]] light] + + array set colors { + -fg "#000000" + -bg "#ffffff" + -disabledfg "#737373" + -disabledbg "#f0f0f0" + -selectfg "#ffffff" + -selectbg "#007fff" + } + + ttk::style layout TButton { + Button.button -children { + Button.padding -children { + Button.label -side left -expand true + } + } + } + + ttk::style layout Toolbutton { + Toolbutton.button -children { + Toolbutton.padding -children { + Toolbutton.label -side left -expand true + } + } + } + + + ttk::style layout TMenubutton { + Menubutton.button -children { + Menubutton.padding -children { + Menubutton.indicator -side right + Menubutton.label -side right -expand true + } + } + } + + ttk::style layout TOptionMenu { + OptionMenu.button -children { + OptionMenu.padding -children { + OptionMenu.indicator -side right + OptionMenu.label -side right -expand true + } + } + } + + ttk::style layout Accent.TButton { + AccentButton.button -children { + AccentButton.padding -children { + AccentButton.label -side left -expand true + } + } + } + + ttk::style layout TCheckbutton { + Checkbutton.button -children { + Checkbutton.padding -children { + Checkbutton.indicator -side left + Checkbutton.label -side right -expand true + } + } + } + + ttk::style layout Switch.TCheckbutton { + Switch.button -children { + Switch.padding -children { + Switch.indicator -side left + Switch.label -side right -expand true + } + } + } + + ttk::style layout Toggle.TButton { + ToggleButton.button -children { + ToggleButton.padding -children { + ToggleButton.label -side left -expand true + } + } + } + + ttk::style layout TRadiobutton { + Radiobutton.button -children { + Radiobutton.padding -children { + Radiobutton.indicator -side left + Radiobutton.label -side right -expand true + } + } + } + + ttk::style layout Vertical.TScrollbar { + Vertical.Scrollbar.trough -sticky ns -children { + Vertical.Scrollbar.thumb -expand true + } + } + + ttk::style layout Horizontal.TScrollbar { + Horizontal.Scrollbar.trough -sticky ew -children { + Horizontal.Scrollbar.thumb -expand true + } + } + + ttk::style layout TEntry { + Combobox.field -sticky nswe -children { + Combobox.padding -expand true -sticky nswe -children { + Combobox.textarea -sticky nswe + } + } + } + + ttk::style layout TCombobox { + Combobox.field -sticky nswe -children { + Combobox.padding -expand true -sticky nswe -children { + Combobox.textarea -sticky nswe + } + } + Combobox.button -side right -sticky ns -children { + Combobox.arrow -sticky nsew + } + } + + ttk::style layout TSpinbox { + Spinbox.field -sticky nsew -children { + Spinbox.padding -expand true -sticky nswe -children { + Spinbox.textarea -sticky nswe + } + + } + Spinbox.button -side right -sticky ns -children { + null -side right -children { + Spinbox.uparrow -side top + Spinbox.downarrow -side bottom + } + } + } + + ttk::style layout Horizontal.TSeparator { + Horizontal.separator -sticky nswe + } + + ttk::style layout Vertical.TSeparator { + Vertical.separator -sticky nswe + } + + ttk::style layout Horizontal.Tick.TScale { + Horizontal.TickScale.trough -sticky ew -children { + Horizontal.TickScale.slider -sticky w + } + } + + ttk::style layout Vertical.Tick.TScale { + Vertical.TickScale.trough -sticky ns -children { + Vertical.TickScale.slider -sticky n + } + } + + ttk::style layout Card.TFrame { + Card.field { + Card.padding -expand 1 + } + } + + ttk::style layout TLabelframe { + Labelframe.border { + Labelframe.padding -expand 1 -children { + Labelframe.label -side right + } + } + } + + ttk::style layout TNotebook.Tab { + Notebook.tab -children { + Notebook.padding -side top -children { + Notebook.label -side top -sticky {} + } + } + } + + ttk::style layout Treeview.Item { + Treeitem.padding -sticky nswe -children { + Treeitem.indicator -side left -sticky {} + Treeitem.image -side left -sticky {} + Treeitem.text -side left -sticky {} + } + } + + + # Elements + + # Button + ttk::style configure TButton -padding {8 4 8 4} -width -10 -anchor center + + ttk::style element create Button.button image [list $I(box-basic) {selected disabled} $I(box-basic) disabled $I(box-basic) selected $I(box-basic) pressed $I(box-basic) active $I(button-hover) focus $I(box-basic) ] -border 4 -sticky ewns + + # Borderless Button + ttk::style configure TButton.Borderless -padding 0 -width -10 -anchor center + ttk::style element create BorderlessButton.button image \ + [list $I(empty) \ + active $I(button-borderless-hover) \ + pressed $I(button-borderless-hover) \ + focus $I(button-borderless-hover) \ + ] -border 0 -sticky ewns + ttk::style layout TButton.Borderless { + BorderlessButton.button -children { + Button.padding -children { + Button.label -side left -expand true + } + } + } + + # Toolbutton + ttk::style configure Toolbutton -padding {8 4 8 4} -width -5 -anchor center + + ttk::style element create Toolbutton.button image \ + [list $I(empty) \ + {selected disabled} $I(empty) \ + disabled $I(empty) \ + selected $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(rect-basic) \ + ] -border 4 -sticky ewns + + # TButton Borderless Round + ttk::style configure TButton.Borderless.Round -padding 0 -width -10 -anchor center + ttk::style element create TButton.Borderless.Round.button image \ + [list $I(empty) \ + {selected disabled} $I(empty) \ + disabled $I(empty) \ + selected $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(rect-basic) \ + ] -border 4 -sticky ewns + ttk::style layout TButton.Borderless.Round { + TButton.Borderless.Round.button -children { + Button.padding -children { + Button.label -side left -expand true + } + } + } + + + # Menubutton + ttk::style configure TMenubutton -padding {8 4 4 4} + + ttk::style element create Menubutton.button \ + image [list $I(rect-basic) \ + disabled $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(button-hover) \ + ] -border 4 -sticky ewns + + ttk::style element create Menubutton.indicator \ + image [list $I(down) \ + active $I(down) \ + pressed $I(down) \ + disabled $I(down) \ + ] -width 15 -sticky e + + # OptionMenu + ttk::style configure TOptionMenu -padding {8 4 4 4} + + ttk::style element create OptionMenu.button \ + image [list $I(rect-basic) \ + disabled $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(button-hover) \ + ] -border 4 -sticky ewns + + ttk::style element create OptionMenu.indicator \ + image [list $I(down) \ + active $I(down) \ + pressed $I(down) \ + disabled $I(down) \ + ] -width 15 -sticky e + + # AccentButton + ttk::style configure Accent.TButton -padding {8 4 8 4} -width -10 -anchor center + + ttk::style element create AccentButton.button image \ + [list $I(rect-accent) \ + {selected disabled} $I(rect-accent-hover) \ + disabled $I(rect-accent-hover) \ + selected $I(rect-accent) \ + pressed $I(rect-accent) \ + active $I(rect-accent-hover) \ + focus $I(rect-accent) \ + ] -border 4 -sticky ewns + + # Checkbutton + ttk::style configure TCheckbutton -padding 4 + + ttk::style element create Checkbutton.indicator image \ + [list $I(box-basic) \ + {alternate disabled} $I(check-tri-basic) \ + {selected disabled} $I(check-basic) \ + disabled $I(box-basic) \ + {pressed alternate} $I(check-tri-hover) \ + {active alternate} $I(check-tri-hover) \ + alternate $I(check-tri-accent) \ + {pressed selected} $I(check-hover) \ + {active selected} $I(check-hover) \ + selected $I(check-accent) \ + {pressed !selected} $I(rect-hover) \ + active $I(box-hover) \ + ] -width 26 -sticky w + + # Switch + ttk::style element create Switch.indicator image \ + [list $I(off-basic) \ + {selected disabled} $I(on-basic) \ + disabled $I(off-basic) \ + {pressed selected} $I(on-hover) \ + {active selected} $I(on-hover) \ + selected $I(on-accent) \ + {pressed !selected} $I(off-hover) \ + active $I(off-hover) \ + ] -width 46 -sticky w + + # ToggleButton + ttk::style configure Toggle.TButton -padding {8 4 8 4} -width -10 -anchor center + + ttk::style element create ToggleButton.button image \ + [list $I(rect-basic) \ + {selected disabled} $I(rect-accent-hover) \ + disabled $I(rect-basic) \ + {pressed selected} $I(rect-basic) \ + {active selected} $I(rect-accent) \ + selected $I(rect-accent) \ + {pressed !selected} $I(rect-accent) \ + active $I(rect-basic) \ + ] -border 4 -sticky ewns + + # Radiobutton + ttk::style configure TRadiobutton -padding 4 + + ttk::style element create Radiobutton.indicator image \ + [list $I(outline-basic) \ + {alternate disabled} $I(radio-tri-basic) \ + {selected disabled} $I(radio-basic) \ + disabled $I(outline-basic) \ + {pressed alternate} $I(radio-tri-hover) \ + {active alternate} $I(radio-tri-hover) \ + alternate $I(radio-tri-accent) \ + {pressed selected} $I(radio-hover) \ + {active selected} $I(radio-hover) \ + selected $I(radio-accent) \ + {pressed !selected} $I(circle-hover) \ + active $I(outline-hover) \ + ] -width 26 -sticky w + + # Scrollbar + ttk::style element create Horizontal.Scrollbar.trough image $I(hor-basic) \ + -sticky ew + + ttk::style element create Horizontal.Scrollbar.thumb \ + image [list $I(hor-accent) \ + disabled $I(hor-basic) \ + pressed $I(hor-hover) \ + active $I(hor-hover) \ + ] -sticky ew + + ttk::style element create Vertical.Scrollbar.trough image $I(vert-basic) \ + -sticky ns + + ttk::style element create Vertical.Scrollbar.thumb \ + image [list $I(vert-accent) \ + disabled $I(vert-basic) \ + pressed $I(vert-hover) \ + active $I(vert-hover) \ + ] -sticky ns + + # Scale + ttk::style element create Horizontal.Scale.trough image $I(scale-hor) \ + -border 5 -padding 0 + + ttk::style element create Horizontal.Scale.slider \ + image [list $I(circle-accent) \ + disabled $I(circle-basic) \ + pressed $I(circle-hover) \ + active $I(circle-hover) \ + ] -sticky {} + + ttk::style element create Vertical.Scale.trough image $I(scale-vert) \ + -border 5 -padding 0 + + ttk::style element create Vertical.Scale.slider \ + image [list $I(circle-accent) \ + disabled $I(circle-basic) \ + pressed $I(circle-hover) \ + active $I(circle-hover) \ + ] -sticky {} + + # Tickscale + ttk::style element create Horizontal.TickScale.trough image $I(scale-hor) \ + -border 5 -padding 0 + + ttk::style element create Horizontal.TickScale.slider \ + image [list $I(tick-hor-accent) \ + disabled $I(tick-hor-basic) \ + pressed $I(tick-hor-hover) \ + active $I(tick-hor-hover) \ + ] -sticky {} + + ttk::style element create Vertical.TickScale.trough image $I(scale-vert) \ + -border 5 -padding 0 + + ttk::style element create Vertical.TickScale.slider \ + image [list $I(tick-vert-accent) \ + disabled $I(tick-vert-basic) \ + pressed $I(tick-vert-hover) \ + active $I(tick-vert-hover) \ + ] -sticky {} + + # Progressbar + ttk::style layout Horizontal.TProgressbar { + Horizontal.Progressbar.trough -children { + Horizontal.Progressbar.pbar + } + } + ttk::style layout Vertical.TProgressbar { + Vertical.Progressbar.trough -children { + Vertical.Progressbar.pbar + } + } + + ttk::style element create Horizontal.Progressbar.trough image $I(hor-trough) \ + -border 3 -padding 0 -sticky ew + + ttk::style element create Horizontal.Progressbar.pbar image $I(hor-pbar) \ + -border 3 -padding 0 -sticky ew + + ttk::style element create Vertical.Progressbar.trough image $I(vert-trough) \ + -border 3 -padding 0 -sticky ns + + ttk::style element create Vertical.Progressbar.pbar image $I(vert-pbar) \ + -border 3 -padding 0 -sticky ns + + # Small Progressbar + ttk::style layout Small.Horizontal.TProgressbar { + Small.Horizontal.Progressbar.trough -children { + Small.Horizontal.Progressbar.pbar + } + } + ttk::style layout Small.Vertical.TProgressbar { + Small.Vertical.Progressbar.trough -children { + Small.Vertical.Progressbar.pbar + } + } + + ttk::style element create Small.Horizontal.Progressbar.trough image $I(hor-trough-small) \ + -border 1 -padding 0 -sticky ew + + ttk::style element create Small.Horizontal.Progressbar.pbar image $I(hor-pbar-small) \ + -border 1 -padding 0 -sticky ew + + ttk::style element create Small.Vertical.Progressbar.trough image $I(vert-trough-small) \ + -border 1 -padding 0 -sticky ns + + ttk::style element create Small.Vertical.Progressbar.pbar image $I(vert-pbar-small) \ + -border 1 -padding 0 -sticky ns + + # Entry + ttk::style element create Entry.field \ + image [list $I(box-basic) \ + {focus hover} $I(box-accent) \ + invalid $I(box-invalid) \ + disabled $I(box-basic) \ + focus $I(box-accent) \ + hover $I(box-hover) \ + ] -border 5 -padding {8} -sticky news + + # Combobox + ttk::style map TCombobox -selectbackground [list \ + {!focus} $colors(-selectbg) \ + {readonly hover} $colors(-selectbg) \ + {readonly focus} $colors(-selectbg) \ + ] + + ttk::style map TCombobox -selectforeground [list \ + {!focus} $colors(-selectfg) \ + {readonly hover} $colors(-selectfg) \ + {readonly focus} $colors(-selectfg) \ + ] + + ttk::style element create Combobox.field \ + image [list $I(box-basic) \ + {readonly disabled} $I(rect-basic) \ + {readonly pressed} $I(rect-basic) \ + {readonly focus hover} $I(button-hover) \ + {readonly focus} $I(button-hover) \ + {readonly hover} $I(button-hover) \ + {focus hover} $I(box-accent) \ + readonly $I(rect-basic) \ + invalid $I(box-invalid) \ + disabled $I(box-basic) \ + focus $I(box-accent) \ + hover $I(box-hover) \ + ] -border 5 -padding {8} + + ttk::style element create Combobox.button \ + image [list $I(combo-button-basic) \ + {!readonly focus} $I(combo-button-focus) \ + {readonly focus} $I(combo-button-hover) \ + {readonly hover} $I(combo-button-hover)\ + ] -border 5 -padding {2 6 6 6} + + ttk::style element create Combobox.arrow image $I(down) \ + -width 15 -sticky e + + # Spinbox + ttk::style element create Spinbox.field \ + image [list $I(box-basic) \ + invalid $I(box-invalid) \ + disabled $I(box-basic) \ + focus $I(box-accent) \ + hover $I(box-hover) \ + ] -border 5 -padding {8} -sticky news + + ttk::style element create Spinbox.uparrow \ + image [list $I(up) \ + disabled $I(up) \ + pressed $I(up-accent) \ + active $I(up-accent) \ + ] -border 4 -width 15 -sticky e + + ttk::style element create Spinbox.downarrow \ + image [list $I(down) \ + disabled $I(down) \ + pressed $I(down-accent) \ + active $I(down-accent) \ + ] -border 4 -width 15 -sticky e + + ttk::style element create Spinbox.button \ + image [list $I(combo-button-basic) \ + {!readonly focus} $I(combo-button-focus) \ + {readonly focus} $I(combo-button-hover) \ + {readonly hover} $I(combo-button-hover)\ + ] -border 5 -padding {2 6 6 6} + + # Sizegrip + ttk::style element create Sizegrip.sizegrip image $I(size) \ + -sticky ewns + + # Separator + ttk::style element create Horizontal.separator image $I(separator) + + ttk::style element create Vertical.separator image $I(separator) + + # Card + ttk::style element create Card.field image $I(card) \ + -border 10 -padding 4 -sticky news + + # Labelframe + ttk::style element create Labelframe.border image $I(card) \ + -border 5 -padding 4 -sticky news + + # Notebook + ttk::style element create Notebook.client \ + image $I(notebook) -border 5 + + ttk::style element create Notebook.tab \ + image [list $I(tab-disabled) \ + selected $I(tab-basic) \ + active $I(tab-hover) \ + ] -border 5 -padding {14 4} + + # Treeview + ttk::style element create Treeview.field image $I(card) \ + -border 5 + + ttk::style element create Treeheading.cell \ + image [list $I(tree-basic) \ + pressed $I(tree-pressed)\ + ] -border 5 -padding 4 -sticky ewns + + ttk::style element create Treeitem.indicator \ + image [list $I(right) \ + user2 $I(empty) \ + user1 $I(down) \ + ] -width 26 -sticky {} + + ttk::style configure Treeview -background $colors(-bg) + ttk::style configure Treeview.Item -padding {2 0 0 0} + ttk::style map Treeview \ + -background [list selected #ccc] \ + -foreground [list selected $colors(-fg)] + + ttk::style map TLabelframe -foreground [list disabled $colors(-disabledfg)] + ttk::style map TLabel -foreground [list disabled $colors(-disabledfg)] + ttk::style map TButton -foreground [list disabled $colors(-disabledfg)] + ttk::style map TCheckbutton -foreground [list disabled $colors(-disabledfg)] + ttk::style map TRadiobutton -foreground [list disabled $colors(-disabledfg)] + ttk::style map TEntry -foreground [list disabled $colors(-disabledfg)] -fieldbackground [list disabled $colors(-disabledbg) readonly $colors(-disabledbg)] + ttk::style configure TEntry -foreground $colors(-fg) -fieldbackground $colors(-bg) + + # Panedwindow + # Insane hack to remove clam's ugly sash + ttk::style configure Sash -gripcount 0 + ttk::style configure TPanedwindow -padding 0 + } +} diff --git a/TK-Themes/theme/light/button-borderless-hover.png b/TK-Themes/theme/light/button-borderless-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..d63fe1f5a9772809550e8f718c822a99595302bc GIT binary patch literal 1819 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VOS+@4BLl<6e(pbstUx|vage(c z14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>GzCP<;w*S2E>({y8xjA!Y?wR?WIrp5Cd)jfE z4OK!(0sug@-D2eof9V*JiST~zv?>(<>DmMCwx8SDt_EZ%13(HA1t35i;2?()z`f_O z4(xqZF*zdfVH0;1ees`g5=u04Nx7l_x zTnJkn-q23436P0I5|KbAkw_E@Sz-~Lx=2!Tk)rHk8eLV1u~bz_MMZ77j;7kOH5w`^ zS{qiaS*K@UV8GBcHZ@|J=;#|TF(o((g|bL;kph*fz*JXJXa41e-Ul*dY)^RHG9V^{ z!^_~%TEKw&B;ek)_fRmPcyR)eM5ahc!U?6)09pz!CXOc%#Kqxg3>*jIG6Y$5JqzMu zr+uVlVRU9}ayD7RviO0V^Ruz#`uh(ar${W3S5Q=1u~JiO)oO$Fh8v8GH*T`B-fXkQ z)^7U_7gsm;ogUsk2R`@p^A9+5IQ&RNWEA_v$+-B0Q>V{dNV#|^HSNpGS8~42y>|UZ z-Z%N*-7YCDE3c@$^YBsa_jUaGh9924Xlib0ZENr7>Fw(ucr`dQJR%sMn4FrP5zfwG zxGF9*HG|8^2vM;N0?uC zubQ{x?uBtec+%FrMh{-%I?XQPE^|<@)cF|WvFnO(ncW6!C>R!7EJNte2ny)D-yxrIwRpr2pL(l`CLG5$&->N``kt;R5(Vdu z+>ttQ-9D$YVMUqyuMHE*^ZYI@)5I9+84VH2BgX@)^Otn!Wcr8Reh~7Vb)#~$ijQ|? z!6b09rhgK-5qep(G%pm~=S<4%dgEC6?C^Y5d`5K4xFNH%%@?nF4n$>SLr-U7p03JH zs?HidKU6Mj6CAG`dbAE1n<>s}~*r^b<>zy+bqspUKb(S1& zbXaW|+#gJB1aC7fTx&ish9i;I`GzxCglyzIEF4ZQD>(RcC(Y2>a^TooMZ8I0lbi0Y zh(|@U3OcOO=9)=^EGkWCvp!^Y5(V|Ak@c;9WzReOr7boFB}W`MD8;OuE|_%0S=0X# z5vTzjp4H1D)$GR&f7UT?R9HGykAjEB1)L{05Gw~k;q)0W{)?@$U8TFO%_R-B(3DwJjP`e_SCEhxWfW|(>kBLv z2BSbjj=#X(fW%+KjTkst1Nz^fsD#=G?Ox?jJ$N!_QIK67hIq3jM(-_$X89g^^zQe< zCgA2h)`@J^=FLrpEKs$R3i&qm?E0H;ASqOu@ob z%>r8&iJ#)T`3h7eBjbNg1t8ZY?-R=+7s4eu+Fl21zA zSWI@2yc+0GQsJjr(Y~xtyEuud-{vy+@~#b5A7lz?$Z;+Fp53h_4JDqZ`YL}^t-$sZ z?IyR79f$%`j^G7C4`2xTG1ypP#50 z`KK#M&y<;pH!^Jb-N<#@`{wz>=Bk;ZHTHXunAe=QuxRehmv6e>?A6s+eDgv$nXD4_ zbEe(E=phFb@DxzMc;$z;tE*eh`DO&apA>+6AIWjvS?^K|BH4H_(xUT*TUWc zfMTAcXdeOgafh63EOG4(YdEl@=Do$)9su@A_}Stl0CP~p9ReVH9RMSH0oeE@0P>;f zcbrV%0CE3+Y^(r^U0KyPQlNwqx@G4f_=)5ZMmT;*o(~j~4%^yWlZHu(G=}l~tpO`2 z`p(wMVu#U>Z<>p#C)P=uKjW?NA#$nTD%8ow4eniPw>gw=aF4(xY>m}%$=TsVUNwt1 z87{2Q-r>?3ejvlw>SRo}aZ2fuL6xrPE7!B#Q?2=7xxt>6WRY`X@m0Yf$UU$V zNv!^wAGX)3pGlOqRJ(T4xazjUK)Rl&Qu*!!WsyWl3qmc(m*`8^sEbrQtM@!ywJw@> y%F8m7RQ5Jn!lgO5bGNSA;8FJDLCL()DMzCV_|S*E^l&Yo9;Xs z0002fNklgW76t%92pD6)VvHc7Y>F;5k*QVo#*+zfDpnX gkchq)P}em+*T7mBaj8c42%#qh{K4)W@2P!UKT( zFjACJG$I-NKfoZ!0df;FqY?v?AS1INnAuRebI{N?Mn?>~P20{IK%PZ)ss49#DHKz}i@urRZ*gZ#zF zR1WgEAPcLaA)An6AbVn=u#!j7{Xt-7?nqyD+ zz3Oj2`uF;u^Pdc+tD-W-Iwv9>8Dxrs0$9ni1n4N``G39Z+ZG*~3-&?g>UK$LGx<>J6 z7!1)gFzZP3QS-vD3ph0vbuo~G-4Yh7JP5Y=@t(^i!*Ryxke^KZbEK1(EgZlLaSH>(FQ8Dv3kHT#0|tgy2@DKYGZ+}e3+C(!v;j)6C3(BMF#HF>1$&oI z28wVNctjQhEB(VD%y>M1MG8=my~NYkmHj2VB)_iEu0)SgpiqRTi(`nz>9MzCV_|S*E^l&Yo9;Xs z0001lNkl~mwP2@75dtCQYO%$>a*B@!12c~p zN|I}Ldf%`EO1mmXbICk;7 zGMQ%1Cok#vRJNG&mqaG8*rRpz^bN+1x8PY?38qY)X74cF#Z~0yK1=N3>o;${|AK`9 zAxoEqhAm$a9u>X*>kS(>#cbJ{n6z#C4*BlXJ$v`mShN-zI*vyW|R^O|+|KMTmAJ6KZ*S~0JeEGVyt^Lj0j?S)bl8fa0Sl*Kj z;?hD~6dH|6!$~fTvVjEGqR~xk8Kayec_r9lhD`@+;FAe*e8?35*eS!@`lw()KHVTWnz47EqkxmC*7aW*YJGX0ezECOc zHuO)cIkwSPCCZ!I$yFs)KMy6~VqkIBjFcqlljkbkuB=c*b7)2#Pa%h)XeDJX=l7gD zM-?*1@ZnmIkL!jfONI}WT$I-*c#2<@y*npVIa(56TAkCYNq|du+w?)7zzdM2=)8eTW)6Ma1!c%-xk36P75f3ph1H%UF?%sn0 zU@@wl-81wF*u1|ps6IIz#TwD`okGroA&Pn>S0V4&(mHuShTVKMkh=AhRB01bnc-e4 zY>p&At+((>urURd0sThLIR zRh!XqPMWA%{s6`KLh~G(r;rU*|L5eVWBI?!$$REwEia_x!^Stm_RZ2l*>+xZetAmI z(`;?@XAqt2Oiwf7s%;e(|*~iVb4~Kj3j%X4O8a#b&qN@ol%*oRU;ADzgZ!jIz zu_zyRXY9c>YbmN2hs^Tv1c(`rE~;Arx{*uP0I+^Cz{|w|(+>dXMjSdXaYPM_C9~aK zfgqnFMLDU+!-|--FbZ9YOG#l@*XAxoPCQ!dDZ(3Zea(rsdJG2~xxNy+I{De(_^Uiq z%2=_UXr15c9SwtO?i$HbTDeS4@K$f&5RGo8$l~` zsM=f;5245C**6RyD;Wg!{Dl##^0h+l%9^|^=`!5}eO-&U(R>P;2*e^U*B_l1C;Sc9 Cymxs3 literal 4313 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 delta 254 zcmVMzCV_|S*E^l&Yo9;Xs z0002ENkl=!H8|JwGy;<14nTvcW?rm;0ghMHc$h1)xp)8 z>hK-l;j6x&>$*1=lTxCTqN*zLJO>~c$MG`goMT;ArfH%m3Yw-tTyw<$gb*Z2LKH;| z!$6j0_ZI$Ut!3LbUOq5@IF7N_`U8a!?ECHy{Putk_*dY0o`hlO4_uZ7rIa7=I1Y?4 z)OCID51n(&^NcZuvMkYBBl^C-3`!|U)0DPt(OLuW0UkFzUqbxhtpET307*qoM6N<$ Eg2P2{wEzGB diff --git a/TK-Themes/theme/light/hor-pbar-small.png b/TK-Themes/theme/light/hor-pbar-small.png new file mode 100644 index 0000000000000000000000000000000000000000..719c88ceaa7b7401faafe2378d77d1ae485127d3 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W{!3HEJN9pSUDI-r8#}E$LvI5@uT^3J(x*0rO{an^L HB{Ts5YGWjW literal 0 HcmV?d00001 diff --git a/TK-Themes/theme/light/hor-pbar.png b/TK-Themes/theme/light/hor-pbar.png new file mode 100644 index 0000000000000000000000000000000000000000..665669778a08f0e751f74ba02ffd32b3a41e71a5 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W>!3HD`Pv18eNHuu6IEF|_Ca0t%rCsBF_cnCP z$rA}liRtMI%zys>e}Dh=?CS6H=E;j5T_JCl+BK=R%#2y|!13kN^$dUc|M@w&v$eOk z(W}8Q;ne;8Jv}}?JRwXyW|h_7I#yX*8wW7{`StCctg`j`9Xmq5ZOdia)Yits)6>I~ k(i9(mZ;z$j;p^fIdy>?5$v)b11n3q9Pgg&ebxsLQ00wMJpa1{> literal 0 HcmV?d00001 diff --git a/TK-Themes/theme/light/hor-trough-small.png b/TK-Themes/theme/light/hor-trough-small.png new file mode 100644 index 0000000000000000000000000000000000000000..96e37b43e6f86d7ca21469928179afaf10945954 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W{!3HEJN9pSUDML>e#}E$LWFAh=n@blgcyP*r z^~1}{%iViaRaO5>uHcZkeEG8c=TDzb83Zu?`ThO9Im5+oe23HmeBJ;xGkCiCxvX!3HD`Pv18eNY#0|IEF|_CbKZ5v9q_wF*7&w zq@|^mu^Aos4+OSVUozfL(~VvvF?a6VC?HAD;Vnj{P@^6vAf&b#=@dv_KqDp6q%Wsm6>Ng`2GET f{gTe~DWM4f!$(Cf literal 0 HcmV?d00001 diff --git a/TK-Themes/theme/light/rect-basic.png b/TK-Themes/theme/light/rect-basic.png index 239ca31ff954f88ffeb031d7e4495175e516e11d..5a652a2b187bd4a9bcbb588db3a5177b74d70cad 100644 GIT binary patch literal 2253 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqBDG*q5b7c&2%JYB6vC#TXd)fS8lv z9|H>mBaj8c42%#qh{K4)W@2P!UKT( zFjACJG$I-NKfoZ!0df;FqY?v?AS1INnAuRebI{N?Mn?>~P20{IK%PZ)ss49#DHKz}i@urRZ*gZ#zF zR1WgEAPcLaA)An6AbVn=u#!j7{Xt-7V;ukK*9*q0KaH{p+&y~eKsj8g|*p}ZD zRW%G~o~QYRA<$KXC>)aiz1PzxMdf)HgUjzn%T`?VNXY!TfOGNh<*)r$Ogs?x<-K7o zFN3Q`RY>&hYjf6kKDofWVo?`^1{pZ;(zL~C3Li3e-@ews+xyb1%kkNKR|b(l^048R z$w$?WeOalofT?Q~kA}fOrh)$Is!NN7Di^R{Br?}w+Li7UH@7J=dNT! z9#_wR{r626Ry~E)e-c@Ne8%D+cPGZ1Cw1z99ED_$ zAYTTCDm7rm+`_={3n3IS&}{ zI0w3N9{c@1OR1(~xAW`ZlkyK1PIe2Os^ZZ!^P%rd&hqx%$#3?)p3~gt(KPA8RF$3% z4HGw$@`K!QAJh}lwj~N)tlp5Vd*QC5Q2ewswP$k-jBU0YH>gh)nAs1siow&>&t;uc GLK6VzV$F^K delta 205 zcmV;;05bp05&8j;Ba<))7JnIZMObuGZ)S9NVRB^vcXxL#X>MzCV_|S*E^l&Yo9;Xs z0001oNkl6_TGD~ z1yzNa!QJsBA_6l*L~vaf(wuXTF&;y|;NCm3s=memz}=y$$Y%B$yFxQFD6vl~G1l zlyuFcG3DdRR}!TWar1pE9TRCPB3~VQ&Dv@1ojZTc^gQ>kYwhQ^_HVswJ@0yd@A`Q5 zPIBAmq@t{=3;-%pX9o}b)}+B@m>0AiNY z4dPc^iC_Q&cgrvsnA2lvzwBRet=F6$M<~tuNyJ>~HMhVK(1rWzL7nJ6%yV&+I^v1w z$#I2xU>$JTYz~{n<#0GW9#>hQsUqO>1v(n@)im{V^%v{u3WZCSt~6d^xWY&%G_iVn z#k*!Akx1Wo^%`q)+m#j~bJ_{P# zd0bi!*T}x;ik8Ri;iVQk!{T|$3l?hY=)Seg*yQcyqW3JVtXJEtbC5VXIZItOZT`^n zBd;x6{dRq_+dm-i&*A$cK8=iuj`_>Mgv8GeB_$s@dMy2`jN>OVb5EbiJDY#*?*-pq zyi{CLTK13f+N*Wf>Km@#Xl!l!=biSB&aUph2lD%I`(3GVsdJl)U(R1mi9{7?-LgPM#}yz>_57?LBJsJ;xW`g3=`8AqNy`vrBja)^*Hv!j0-{S z<=d10WE*aNDGt{1Ztj1NbtnP?L5n1Stc}b=(9Cas*+)(mG*+C92+FUL zX(f9HYwYV4gr`iqu_Xu;(b7rM%qzWJMOVH_?3eIh%hEybFRcf@8_y?e%kLl#h$b`Zg5as1gPV!dC7fpOqqb5Gd~37NkEq>W6^TN04+%)h78T^1p4TDXo$s z1Y%3^#0Y}POpu=|Z1|1s|HMtU{#}J>A%cY9Z^`DS)ENa%Yx2d{j-783 zQ?`Bz^2GU7lOJuZRwz0V+zUZa*S7I+=vn=uA4WuJFHEGu(caHmSj}n(u7};DSO`vK zJ~fTMSmtW@XjLIYuNTbZ8W0kyminxkkhbeYl?2n+tAVsSobSx5p;s1~#2p+Z1vn zl3YYay=-CcO+aAqH95JEiVwP2;1+1<*|wtPN{Qr_>iC+X-aFl3lAHXyV4BiF_FMe2 z;XjRVIk2qp;qJ@;E9cG|cdwSbuM4A<+bFxEWDPlH;N28cQkolh^YkrAmD){3@J!z` zZ*tr!wjr?FI%FDOT9GYHxw4bmydg5ZW^ast*0l21l!nSC zDz^H$E?z?LnW^faVi3sl6{b#(oJ|!`!QyDcdhfqx?NUYH?tL=io@#Z!PZ@#>p7=zz z$}FqDD_%717nhBeAW&aZ@I({bC4UISde8XvC(Q$Vx3^mM z3gQ%NCkp*v@;wk_hbRt^^_Oi-7(YbF_TRjeI64s~@~wGX@BC!!z3iEsAOvg3kv2*z zZ)85@$Q3`nLylP$I?4=3)run!sA`uU+KaD|Y)3lqvhJT^7m?Sm;Y@#g7(q@R#2nUi zU(0#}EcPAIYn)8%6_5?N2nIvE$>Vq9%bz8QpPS*lcg)%%K&w+>i6AXmPE{^Ku+ByP zP0?g90wb-4nHVc7@fa~Aa+iSS8z4HeE_+J*Jc7r!X~i~|_2=fM*I_Q_b9-&>jLqFG z|C>9NL|xDnU}T9u&zb&qu66)LseFYm3%7}I4<~z~>&6NaHp^nm#M4TnJm&8Dt^CL%9<|zx0pX?gdFPAu>}ACZ91a@)nC0#g zH?i2TzAW7%wJ36bO57JGs_Q{^$Svqv#6(yA!>qDlxoT7mWAU)~KL4Go<{O`&kPI9Q NNF^H`3hjO3e+CW5=8FWQhbW?9;ba!ELWdL_~ zcP?peYja~^aAhuUa%Y?FJQ@H10F+5YK~y-6?aZMKg)kIA(F+FAx`q)DJW0|iScQ3z z-GV6y8bKE*27{og-{TsRuX+YJRZ1zH=gG1xc<+fZlA~!Fx@E3o97o!=r3xXWd7c@D zfxhq2T4#m#eY5X7+qN-H6P0r=8Dp^4W<_u7x^i6?wf7zo`IG^O2*+_y#~4vceGZjU mJkLY@d3q^f2}@YQ|AaqqfHd^(dyfGC00002@EPti}$O&|M{tSckSHu*ROxBE9a70zMzmu;^X)Cj|(m4 f`PI+={#*Y1F~^2~ z= iZidMJ^8K@aCKNC`UiER9ve^ja8wO8TKbLh*2~7Y<=xX@@ literal 0 HcmV?d00001 diff --git a/TK-Themes/theme/light/vert-trough-small.png b/TK-Themes/theme/light/vert-trough-small.png new file mode 100644 index 0000000000000000000000000000000000000000..12c4da68fd9928954fbe21b5e1f095f55836293d GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!{!3HEfez(s7Qi+}}jv*3~x(6KvoeUYA54t$W z7Oaqzx#G-gQ+k4teXr5wKi*|~ul+h>dH?yG^^GfdTv8RZm;)s{PC10IEiw|AibLq> h-tYN6A9sEKC-42#>|Uw7%|W1L44$rjF6*2UngCpKG!Os) literal 0 HcmV?d00001 diff --git a/TK-Themes/theme/light/vert-trough.png b/TK-Themes/theme/light/vert-trough.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9819644a6d43635d179db859b02e05abc2a9ae GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol+0V3C3^0@(|R(rZQhDb=}9^B~L${^DEuvj5# z535EbqnX0OZAvD72}!O$u5T#j(@I+EZNa2_Oibs@)lW~K*3JJvHTL>m6W`AvB1i9T z%awn<%Wl{E-`BV0&M!^9|J~pJ@|WOgPxt0YaH#UM2(dYFGB0dt3^?SVk*F}mK)?$_ z_+jO|`dsl{4+~}Pzuxt(^r_AH{CK_TSrTpASFMWjwCj7E9XYMtzU!9LG`s!mEkI{8 Nc)I$ztaD0e0sx3WSx^7~ literal 0 HcmV?d00001 diff --git a/TK-Themes/water.tcl b/TK-Themes/water.tcl index ac96081..d5976ef 100755 --- a/TK-Themes/water.tcl +++ b/TK-Themes/water.tcl @@ -1,5 +1,10 @@ # Copyright © 2021 rdbende # inspired by rdbende modified azure to water by Désire Werner Menrath polunga40@unity-mail.de 2024 +# Update add New Style TButton.Borderless for Buttons without edge and without rounded corners by +# Désire Werner Menrath 28-07-2025 +# Add Update Progressbars Round ends on Horizontal and Vertikal + add small bars +# Désire Werner Menrath 30-07-2025 + source [file join [file dirname [info script]] theme light.tcl] source [file join [file dirname [info script]] theme dark.tcl] @@ -13,7 +18,7 @@ proc set_theme {mode} { array set colors { -fg "#ffffff" -bg "#333333" - -disabledfg "#ffffff" + -disabledfg "#aaaaaa" -disabledbg "#737373" -selectfg "#000000" -selectbg "#00c4ff" @@ -53,7 +58,7 @@ proc set_theme {mode} { -fg "#000000" -bg "#ffffff" -disabledfg "#737373" - -disabledbg "#ffffff" + -disabledbg "#f0f0f0" -selectfg "#000000" -selectbg "#00c4ff" } diff --git a/lx-icons/128/settings-2.png b/lx-icons/128/settings-2.png new file mode 100644 index 0000000000000000000000000000000000000000..0b0a09e71e62a0135ddba38f22d3140153c7ab7e GIT binary patch literal 65969 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 literal 0 HcmV?d00001 diff --git a/lx-icons/128/settings.png b/lx-icons/128/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..72abb7b05ab99fdec66ebae81703fab12bdab7fc GIT binary patch literal 65969 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 literal 0 HcmV?d00001 diff --git a/lx-icons/16/settings.png b/lx-icons/16/settings.png index 8f49da2556ae3da5e2cc48f2dc2e4f355394eef1..e5f4bfc03161e830982d1507595e8f078cc866e2 100644 GIT binary patch literal 697 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=IjczVPIes5AX?b1u6)f`k#0dFy+7hl>a~yt_8@BpZh9t z-V3-0kO347nDVcG_tGct^qzgtnssm*L<>;av-g^BzsP4Tx$Qq0VF*wQ(AebpPhWjf z`uI&EciA&Ktywh!Nb ze*X2*?BCbV2hAl;+&KMbp?-<7_=eYYGHijW*?K_38I!!-U1DC{V3-c%a29w(7BevD zDT6R$#Zvn+pdfpRr>`sfOAZz;b`_h5(|dqI^F3W0LnJOICn&HP7#SIEHZa<>$>1V4xXAF4O@EF%-PelC}@R|vWtVN zMnI^pPE4$Gu(!0zp%sf)FV7bcOw16;%wY;Vlp&RxmY0~Bs++?sIAIdcmaUun%L=X} zHgi~5vhUoni*?swnPVqjJbd}|?c>+%#o{g(;!PSRPMn~AkbyzUOt|!#N(Cp-sSKX3 KelF{r5}E*0L`v`g delta 675 zcmV;U0$lyM1@#4x86^e)001BJ|6u?C00d`2O+f$vv5yPy{D6t+5sPb2LlBd5-MZ3?f?J+IY~r8R5;6>lRrosVHn1L zmrE{Db5<=;6Y;gt#bV=^#R}po>eP6r7yIsl}y>APB`SQo3YtC_)!Y z9So?o2d$t@iJp-_G`UlW$#EUzORLrv`b^*V@;u-By?-8wKf~1*i98O6LX7}_8=98> zu)6vNC|)HxuiV>W(deVYOvW4=9-ei|G646wyE#2OQyP3eZ+v)s`?Kut}5nx^3Pukpz; z;ZUg2ag8Z)BMODZ)s5S-Ys&<1x$PnU`IJTJEE`To|Uw?83tMN+R*v2^1TAKChT_wbzSu z($CaHD^0;|3Izw*RFLjo_B&KnRFrq3!RPY=MNx6v%;e-}u}J?yO4p6&)6-o*QgkJ` z7>^I6blnhZdle!kR$2H#y2(sWM@P$MDp?k<=I6)%YNr3S^G`(V?K=u)M>PNd002ov JPDHLkV1ku$Jk|gJ diff --git a/lx-icons/16/wg_vpn.png b/lx-icons/16/wg_vpn.png deleted file mode 100644 index 0bef818b66903c8e56e9f71c0fb8a0b0ac486a6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 846 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 literal 0 HcmV?d00001 diff --git a/lx-icons/256/trash.png b/lx-icons/256/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..73e6966c429d99722d1259d4556439418907338b GIT binary patch literal 263023 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 literal 0 HcmV?d00001 diff --git a/lx-icons/32/arrow-left.png b/lx-icons/32/arrow-left.png new file mode 100644 index 0000000000000000000000000000000000000000..8a7ea076b068f49b5960babad016c7e48de576f8 GIT binary patch literal 662 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#NP~u5|Plzj!4xIXb7$cwuqgiu8fRtBBkY6wZ1AmU2 z^rAnldV7EL3Nc-Om&?JH^6IWXZ_~HqrVD?rQrP!&&O!9VjVd!9$^#F1>3p^r=85s1GL71^( zseKtxkiEpy*OmPxyBrs@d176@4^U{Er;B5V#p$OL-KClwc-+)En5H>8<}A2zKyT5C z1xbfb{pEim6mdqz;l9~>|4*tMe-#g;L@*Rd?$FVnz{+4aU0{G0eYryj6kyTmzpeb0lMovX}S(;j?~<52q=y6^aI{#A+gKc{<`&M5!wd|RYZ f=9PnR-8B8rRT3r}9&G&%^Z|pXtDnm{r-UW|VB;%o literal 0 HcmV?d00001 diff --git a/lx-icons/32/arrow-right.png b/lx-icons/32/arrow-right.png new file mode 100644 index 0000000000000000000000000000000000000000..c1a4d705b52bc6e856b0bc7081aa443f2b6b070e GIT binary patch literal 661 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#NP~ug9Plzj!4xIXb*dw4f_ohv-15!REL4Lsu47NFf z^?#SiicI-=$dI$-<4tcS=I}?aGuRldPJe6TSK0WRgIjLyp98AfP8>ga?y9Ezy0xpf z9#jyU_I<^subl$cXWnK$zT;ywwNTx2@^RPgKyw+Byxm;OkH}&M20djE zW~^9hUj`IpFY)wsWq-*o$Hi=(SeNeu6k6-);uvCaIyph2vti=I&Y7)(>zTsL%J|&e zY`83T?x?KzxFR9p$zyQ=5usztom@hEVw{BLb7^KuMp{3 z@O6hGt;NfxZR6v*aP{%Gi{=g*1|h~qZj5TnnC#M?aj*s*QqpL+c<9opDADD{jeT1- zZryxbSO4jQ7f*Vu6&e_yK6=$=t>Ngn_I2O!DnI_3bIe*Fjy$)Sz@(p_TEm&PgNeab XQJhua^SeHv!x=nX{an^LB{Ts5o3kdr literal 0 HcmV?d00001 diff --git a/lx-icons/32/arrow-up.png b/lx-icons/32/arrow-up.png new file mode 100644 index 0000000000000000000000000000000000000000..9e28b0b8edba676e1feea1e62049caba40f98b81 GIT binary patch literal 4980 zcmeHJdo+}37=ONTpNN>!YGjgHYRPtLY;9~>ve-3D?rbGYXN+(r5@}K_q@;V_x#@HdA~2o z*~w0WtVad_4f}6wm}sO)f2zvpe|vQF2mom$+SN0h=@&^0!GW~!sIWj<;7&FR zVCVf5H?Q(}3)IISQC5+>wZf>i%#3-xW9+Ol|0~?I{q^zdwY|OdsG?Hg((!v|C>lB3 zvYMJ`J(K$XIW-Q4p@LTq%h?+37G);k?_N+a`S$vDIs^XVJibJV5 z{dn+6%V#yaA-f*y)p0u1-N&fz!?ih1!`XBvHqk=U`u}r=~{jKr#&|DpdrmsnOPxAtW0)79SQ12$|l{=1INVKL@ zKV1~iYU1w^bU3wm?WRHc+JS@4ELPyjI-9SM9v0P~0!l_KHv*a1*nsT`46E7wpy*yfJv+oIDyT(J*^w^lN;cypv64*xYV7oO+F;vo zJ=gnBBeN9WJJh1&lzvs;PP>Kzv*nHEj|^M zpG58`oH!M8qtB}CG{ZqhkS5`sO{beJ%z2e~Gloyzb*Srvt5MdCINgD#l+C$YiV{v_ zh4Nz^j5{ zyZV8yNKw~!Orx{rNEeUK@I!5&xP6_yt17Y>)qq3*t)=!h)~=pv7)`7D1$sPf(+bG1 zfO7_6!pJ0O@<%{7w7i=)2#C)y0*Wyl^4+qD`SQk*ivS}7*T*M-4;U=L0IVbuNM`T} zEqO>xnE=XGlLS~24zLC%;1vQD69h0wN)Y9CnvlNzresqhAO#qgKqNwNBat8<1H6p@ zs6}%j5D+ZsC;a#9A*K{lW@l+&$pCD@F$hB$pI20bIE)~TA~G-0QN*J05&_uWCJH#9 zxy&Xrf#x}2kKuT{H0ufUkwI35esl~ZRD`6`Agq5J11^bxZj1y6UDEO8vNDi~fVAQP z@Kl61in0u?2*x@@PeI`g2s#=C=^E;aP((@v085v(Gya#r>x#$W5CWfzvWqAS!hU}P z{NJ%;8(c%I!clX7CTnL*O2AP-%=)+DEdYpkh1pOH7|QcqhMv9lLB4M~W0R0jeV4m* zeNqBSIQSq*J&@l|iep&D8FvgF|Kuk1k@}+hAy3*FL!)3l*^WsGpoVHf`SK=|Aok35 zOj_|Wnbdb&8TO#=h(QT-O|}UUmCtMs5HrZCP=zu;A0Xf^i#l&ZnpAr#9HZ=R_Mi3Y?lUT$&Oc(%~e{}q5z-a|O Zlme26=S+kRj{BtX>}{QFO4e=W{R5B0NTvV) literal 0 HcmV?d00001 diff --git a/lx-icons/32/audio.png b/lx-icons/32/audio.png new file mode 100644 index 0000000000000000000000000000000000000000..0058d3d6985dfc0f5c877651afd6f834a4faa277 GIT binary patch literal 969 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#N0|R4EfKP}kP{F~Y;fIeU@7&{h{ABg!?FJjSs&Ck$ zcJgff)?J~i*K2Lusu}_F?#a`wTecf*+NN{#MA7k6HOEd=fsEa%cH(r+@l(}6^MMG+ z01BQsU3=<$^MS*Kd-kVq+~&Swjn3)~AWMO0?Iw^iAX>Xot-V)f;Zo(*>s8l)(ZVIl z?L9K#5yGkIV(FP;U}dTh#{+Ey+Om0@{*mK_K*NFNY}lf?d3)ggLj?zq6dpWWxN4oo zvXweZSL&|cth|1+($<|um#?{Cm1~{9et+J%#|{_*A3omL zxyN?fF7s`>EZ@Dq{`TFqZ99Q%iw#>ePM>Z2@#E9!v#skk>h9i~dg5f)@snM<_NJ`e z2=toLLc_;%f$`x~666;Qq)`Evw2U+-SMS3oPad`KNZ#UTQd+pY2yCc%<)kA ziH!7v`_kM~pTB-Jm0L*9z_YvH7SIUBByV?@=#o8CO@JKE0*}aI1_nK45N51cYF`Ev zWH0gbb!C6aF2$vydvf^fh#mumTwK$p4ytff0&t={*-?GV!2VXpp=V;i;bDtS#J$j%-)3u zPRx*wZ4CC%U})RL{QNhB}(r%d;{6I!hl$SAZ;<*&9j?Uh0|Bn9d-h)dO z3^grPO;s&51(!2T;F)qLfI9gY!Fw_dd|!c YYPx+xSsu@SU^p{)y85}Sb4q9e0B%OMtpET3 literal 0 HcmV?d00001 diff --git a/lx-icons/32/carrel.png b/lx-icons/32/carrel.png new file mode 100644 index 0000000000000000000000000000000000000000..db9232133e1119dc0dabfe92916e985eacfa6989 GIT binary patch literal 665 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#NP~vugPlzj!4xIXb_#vRbW?J0a45Zvkg8YIR7zARA zivrkXYx?_=IP?B~_Gta$k}@Ye?3+*NOG}Zg#)cR!{*Y7$7A9s!rOB&TH3?}<=d1tI z`@<`F_J?1;A6sYKG1RxwnGn7DHPA@LByV>Yh7ML)4%GN zhTt^~0Zfyw^tT$R8W^k%aa?iGvXr+q*ko3fxB0CJi!PgrZobaXJuxKn<~Cc0g9rU< z?()0$z3x$;kYrUH+dezkP+XvRWzzNS%G}U;vjb? z#+xT~>Om@#J%W507^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f-TA0 z-G$*l2rk&Wd@@jkv%n*=n1Ml08H5=tmfDvA1=&kHeO=jKvP zybPRNph5xxkV6103bOpsy*mgMRAk91sbDyOiHhcvWz?txMnhmU1V%$(Gz11b1TZQi zP>ltuG-v@pW}^eR17Ix>E?{*D!t?@g2XHd~r6A-9z6IdEG(SE!NK7QbO z-Yoe4@82JgVxYx;fBg8d`_-#gKVh0-QIE`ri&^KkbF*@CKL<*Z8!BIafB!0ZbaExA z9S8%UxQ53!JOrS!D3VN^+<*TvF#d(5r3Y0Agnr11J|WBd4CE+J LS3j3^P6)m?Ux5q#U(+0 z!9beJA~ZZmi$!Va$G`uc*70z!{Bm*Pq}7+d{w{R*yuwwOS=4LYx3fw2quDu=pFCGj zarSws5tII7IftUcW;aH=ZI2&qH2-z(!7WqC>#tX_ZGU@5X5quz(sMQ}*!GA4PuyD)UH%6b4foCO|{#S9F3${@^GvDCf{ zD9B#o>Fdh=l3k9A**vi>-v_9t$kW9!#NzbQOXST2k4uDQL0 z*GFfb$GbO=R96IxcvNqYJpJJIyVSrZpI9|FRCu135#N@4-=FK-g8;6a9Uij<96oZ$ zm-{eUH+gt6s4p)nXj3TAYv7(H@^6#OfmFfg;nySX+!2dn-1&Cy;*d)pivxBx8#&y1 zm@(zQa=^~#w;G;>8DG5;&mfUH;WZC~+^Up&j0}gL$(=S`Cu%WYskdg0000WV@Og>004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00002VoOIv0RM-N%)bBt010qN zS#tmYE+YT{E+YYWr9XB6000McNliru=?5ALBrhkm(kK7`0dYx0K~zY`<&-f_!$1&4 z|E!$^8>dJ*BxFh`;4lPg?f{nH00;>xT59e97eRu8h9U@25CstwM>abY#IfTY#~Ub_ z${vs3{y#grz#oIMhgZNyCx0)LaC4x?-Nk@D*jJ~t563J~x_#X^*P|5?;Lb=L?&(lo zMIABoMJytw00syRK|dG(Jc<;wh)|gmlI-W-PL54aqE63eBll4yu}`(gvMtt@tPd~AjEhtCVc0hc{O>qQ~(e>c=IVI7qnCp zr7#q5|N&|(tH7BpJOFKcteMGL!g7MkLoR00?Zfsvy+Knk!*l_=88 z=|po0@QBah#!b6N?n1o)K%9QuJ`IC1oN?Igt}BZRM(aWUazOQkcJU3Ddw+qye5qjo O0000T literal 0 HcmV?d00001 diff --git a/lx-icons/32/file-python.png b/lx-icons/32/file-python.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9b8d44932ac71f086ffabf88b75ccbb0a5dbe5 GIT binary patch literal 1185 zcmX|92{4>z82)Gli%yP;sg-e+R@{wanMBC0yS9$VP|4VaXoZMDI=y7 z0Dx6=6eAJt4*S#WEx0l|ZcObP8BvLG0DR*LKnWKB1EfmS09^9{K*ItcxDf!G{M*8W zlK>by#eaM@912!eR#sP634++(-o|l!cXwB%QY|elp(r{$JWP@#6ugE;qgh*9gBpcG zp?n3kTCLOR3+4#r7GBNI&r79Jm_q&v0)ap* z7Q>{Fgy`+<&CkzA5QNL+LNQGBIyejhQ|tA5=maZ)(H0jM=jP^coKO&iQbDK`gy<>W zIxepoz}m*;VhKJyhkwzA(JD|6MCOUePL!hOo6)H`yk$(zo0MPe#JoAEH%I1$$ZCh= zN~Hqde+MpE#{XW#OYdP)9m#7};gNIhI4nmt$*DAFj-kBM+`v9BRoW`3@w{ z(a;yBTz)(&!Rghgf0;C|R!~>ZZK!8AHXy>*96isI-wVGLqD9ZUYJr!MgNIzuTPh%q%#DefZfkr`iBmG zNkCB|GYRf*K%v@E%_-kwgq&+hmFYQ_c7z@d#6rh0!>CkLW>Kg5S7UM5%g0UcG7jC0 zF2+VOEbQke_YL#>sMJCLyqx!^(N~?Pzl5Y|QFL6m>58c><$YhN@L4SMX^3Woou&Pm z!E!j@v$3`@VKfGg2v7F6)(Fh(DsEKvx4PHV_|ZY3TlRZ?*4=#tNAp=(d2T=SAgN)8 z!r66)n<$nh>f=7vt^DzJkZf|-IEPwe?Edv7>ws>GNA8SP8y1=z_tUXoj8B+Gn$6A< zp-E^arj=_na?4~sZ~W$GNb_)cd6x~-M6?_-di|vlJ52QSU0Q0&(1CKUp}aJb5fL6a z&GK~&@CtGCbqfk|@%KCxY)fYsMr55EJRKhr^g*EaSnEN0Si-&ZL|S}s&`8HX_elFk zwsGvj^T~z?k>oR@E&oU4c`xZ|hiiU_}zmTtz&k=&}CgyYX6g-wDbz+zV@F3bC(9P@vNGi4=J=?2ikl`F1Z}c zWfv3;(Ap?NMY>HZ%fCw4qjwJ3cq9~1n;S2JBN=(^1tFmM`LM~khcU2)07Qo~89irM F$p4XTj(q?C literal 0 HcmV?d00001 diff --git a/lx-icons/32/folder-water-documents.png b/lx-icons/32/folder-water-documents.png new file mode 100644 index 0000000000000000000000000000000000000000..6b83a4fd43a103da531026bad73a2133613cbe32 GIT binary patch literal 939 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#N0|R4EfKP}kP=R{qZoTe3a?QIKYPadM?-8xrq0_Nj zxOTfn$8M3j9dgaPh3j?*XU`PLo9obf!?E{f;MD(tQ~vu+e`S=@Y>?Be)w@l#W3Oua zULdK~u~)NWultOh@-4fh8h1%F?38WZrP8(=XeQ7o>84$(?R(66K!yX6WaCbS*4;{N zdz9Pur~tLM@6qet4pauzDBl89vjb?aNc}E>ij4x9Q)TlP$rUUS%$;T1eaUmu8@ry% zAZLJG;yeAB|Fo|_Bo|=p)UwyD>9$+L9mkfvlKy%?-vNPm{Z6s^9Y7m_h6~khmulRp z*|A5fbB|8fUfr&}+MRo4n?SB@+kh2)EYLPxqj!>^CvH!JyvVj zU{SfJZ_Df1dq2+F^D%JRKflSKKma-*V9NiXY5)DF{5GpTrk%M?I}3=`YiF+YoBGqU z=N-Ry5wmR+i(NE}Z8WD_s&3g9kM6g8o&~J-v1|_UdSzQ!?PB@8ivy?r1Gh`pB}W#SCy!<}G&EQ-${Z7Z@$O!9VjVd!9$^#F1>3p^r=85s1GL71^(sXfSM_7YEDSN50e za$H=N;VeIyfO-@?T^vI!PA4ZUuuTvVo<5<4K{HcQ&4=~OrXst20t)LFoH*3Au)){! zCO_Ms(2%P)E{Ybc$o}!0)uD0zvT0^AFJ5@Pcv);zAgS@2m5ueVgNKGpOY3hbsY2s| zmD27mZm!1@nr@tM5LPu~lMCLw<422&j)J1y$um>h8?WC{vQ#zY<@WIP+_vRW@`LT$ zJkK9syp)^6D#7yhjq&D!2A^tc#|cat=GNNmJPkY&4xtmK&Ym705HTgZC!lfJf+btl z?Afzu6W2l}U&m74+}POI+|=4UF+0{$-d@!oqF1hk@F%f8DA3T?*FO4`yTC(C?8)3P;&o8kyhSDA^#KBv4k8b!h2=lQ#orI378A^{gy=!RHSmtZFs-`Ew3*OI3<9 X#Qc_24;PKS2#PIFS3j3^P6SLL#Jc6 zaP4-Dj@=@4JLH;o3)k%s&YmffH`k%}hGXx|z^VTOr~LPu{>mt)*&wG`t9P4f$6nR; zy+Bf}W3Oh%UiTS0-Wyyynpt_{gc=4sWogobN$Y%=TBZdd#u*5 z!J=|c-ikeQdzgKYC?b*qsvnCVy8E2TuJ5bpN3V)owt_rzFTP7~~&Jz-U$7kf*^Ya{S*}TbU=9 z99d+ZJet|i&|t+Vb4>Wj6B!_UA_F9Wl<3(r%$^gccrr6GMM>@74m67~$=lt9p@UV{ z1IXbl@Q5sCV9-+rVaAH3_GLgp_7YEDSN50ea$H=N;VeIyfO;G~T^vI!PA4ZUuuTvV zo<5<4K{HcQ&4=~OrXst20t)LFoH*3Au)){!CO_Ms(2%P)E{Ybc$o}!0)uD0zvT0^A zFJ5@Pcv);zAgS@2m5ueVgNKGpOY3hbsY2s|mD27mZm!1@nr@tM5LPu~lMCLw<422& zj)J1y$um>h8?WC{vQ#zY<@WIP+_vRW@`LT$JkK9syp)^6D#7yhjq&D!2A^tc#|ca= z9%W&Ed=na&c~~QNR#xte{2}s0T;$2)@PLR8cgMgqzrw`CLccUYJz+1e)2B|K_VO-> z4h)P84UKHP-L>Y`tXsEcz0#2hYhYTqZr?sWO^pjaCvr1#vhwn>a!wpgboI`Tu6B2? zj?VTL^AomeWLVCrVD7*$OIoJj__F4?0?iv12aD^m#-8gt#G|CQF7KU1!|e9u8U_!m gD<8AOT{*FvA;46;xnlBnDNt;By85}Sb4q9e0FL92&;S4c literal 0 HcmV?d00001 diff --git a/lx-icons/32/folder-water-music.png b/lx-icons/32/folder-water-music.png new file mode 100644 index 0000000000000000000000000000000000000000..0508a965d0ab81c775c38f12adc90bd751c932cb GIT binary patch literal 1021 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#N0|VpE0G|+7paS*I-Fn@7SLL#Jc6 zaP4-Dj@=@4JLH;o3)k%s&YmffH`k%}hGXx|z^VTOr~LPu{>mt)*&wG`t9P4f$6nR; zy+Bf}W3Oh%UiTS0-Wyyynpt_{gc=4sWogobN$Y%=TBZdd#u*5 z!J=|c-&KLkzxua&V{D|2=5^#A@-etGwQR!?89m9fTq!WXs7C4vDJyuO9LlfD~Q z9Aa}!V6}^7v5nHn-e6jJl*KN_r1FSK#UZuKr2>9sJ`=ur_I?PQ`VZ)-*qlaBAmvjM z1{N#xY5I&Isl0ZuI>=|ay ziBmk88JVJ__HPH8#hB#n?!wT)D(eB{a29w(7BevDDT6R$#Zvn+pdfpRr>`sfOLjRf zF3WJ1pG-hKZk{fVAr_~T6BgJehzL)g(88dZDXHeedS+9R-97<@^$SiM>RQ;~>v@x( z?N4aP)f*Q@3sz+R_|59jIDgqRGnp4Jyk5L4HY$+R_|3}3df353L#Czmx0F<&aluMy zcNaI;;|WbSPB;jwnz6|RZ{G2v#YIO!(eC7#DeaBd?bdHcqAb3ubowYB2}rWOw~sosSO+UnvgMVksVPn_1*(9zL3asKei1uG<0 zEZD)Zy=l^=O?Nh35|ZKCwE2{_*6Gcww6r&9pE$Q_-O9D6nT2oouE@{G(aK^IydnBz z>y~X>%S)Iz?{Mvkvfkb3!mp=Y^;_!K??#teF+F#`73Y|QEt;fM=FIIC5e;DF+mU?v zpkIgMjfSLL#Jc6 zaP4-Dj@=@4JLH;o3)k%s&YmffH`k%}hGXx|z^VTOr~LPu{>mt)*&wG`t9P4f$6nR; zy+Bf}W3Oh%UiTS0-Wyyynpt_{gc=4sWogobN$Y%=TBZdd#u*5 z!J=|c-~&$EElK9UOcMVx%aV4?_=@kRu1Q6@tAgY=OkW_ ze2?xo!htpRZMOoa{TGjJQHY=F(fdX|ehRN=zF1JBXV079>HmYK|97AG%4_nQkm>)O zyY7hu)(Qtyt0phh%3PzBv05v0t!nZj)2gGI8LI=Q{sV@^ z@%40Z46!(!oUp()K}2}^gcb(POi48#)-#)m?Dh#LtY2{AP}jl+U(cKTY=1&SuHLvP zTCgJf$8T1L#`(*pnaR9(;q~HWu~C7f#&1?O*24}S8Zs@dzon!KjSE&vySuo#9#3ex zal%1Z)r?Ipc=L`QEiO6=igqW@Olfbten-ht)s&ap!`E}$mPg4Cwr}%1e}M5)ZVsyi z%iA}`n+qCzs;wO-H0jJ?aCIyTSLL#Jbp zaP4-Dj@=@4JLH;o3)k%s&Yme+xX_{ZhGXCDz^VTOr~LPu{>mt)*&wG`t9P4f$6nR; zy+Bf}W3Oh%UiTS0D$;O=ut-F=l z_9(aQQ2}ai-=o*P9jFYbQNCrjaP1DDy(0Cy1S&QPWKNaMUnEz!OsHVKZTBV5NpCzS zzqRYV3UUe9F}~BE`A_=_L~;SfPAz-gnr^!_+;ME#E9tKX^dJz3*Y6ao-vP7~XueSG zcB#glnjL$zI``;w?bYqttKGR*wh83m#?9wXUB7qs=KZrb?w`DVPpx6&nd^66J%94z z*<-ba4HlJq`nJ5Dz4zm+Js$(7{qvg)3J0JA0;c>An)ctd`>Ag3Che?s+F9#a?4nrg zqJ5`)_n7dG%^^Nu+Fza0P5On~S?ppoGFR$XY-e{#*2-MVY8NY=)XVQ*#B39(k+o94 zatDV?a=`Szx@DVPyPpM4{Reb;%*J!xK+3ly$S)Y=6HLHpRo#%M!6pa&^v8d92hcFaByV>Yh7ML)407E z2F*-KH6PY9n~L_;2`H>zaNkD$akQK^K|udS?83{ F1OWM>flUAa literal 0 HcmV?d00001 diff --git a/lx-icons/32/folder-water.png b/lx-icons/32/folder-water.png new file mode 100644 index 0000000000000000000000000000000000000000..1d3560a8602debf75fc36f376e735d3d77a19b93 GIT binary patch literal 766 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#N0|TQ`fKP}kP=R{qZoTe3a?QIKYPadM?-8xrq0_lX zxOTfn$8M3j9dgaPC8{?_)NFK`^dNBR|G+8#{ieS%%4s&pY1Zo9rrNPrwS6y;RO{HQ z*|FDs#!mT`T~dv^BpPMgYWcb{?on! zkz9bWQ_EhrrrT}}cN|;xO8V;oeFOyJ^*hDtcL41I8Y@)0U8-@XX2%|_&OJI^dv&|^ zYIp9HZQ9ki`TVKt_s-tDfA+@xlh^O5w{Aak8858mt&) zjtM`J0m3ITU{dt#8D`IkQ#_d&nV4@KKMypAG0EHAg`tC0)&t1lEbxddW?;}$24TjE zrS@e&LG}_)Usv{*>~dUO77ENKrvQa6dAc};Se#BySYVqVA}A`{&cNxZspi9a=8}=z zJOKr5_49|i7B=`gUgT!mGj&Snjfb?HV&bK~(NCT4ne zjNBdl-KNIRQy*;J;Nx?MQAk(!hs2MyYbFO5G^Au}*G*^=nUfH5Fd;ah+1f034T}Uz z?pvWkO^+?xMNH`Ze^yq#V6odhRtC+7OoyecuIU1O$KdJe=d#Wz Gp$Pz{(JmDL literal 0 HcmV?d00001 diff --git a/lx-icons/32/hide.png b/lx-icons/32/hide.png new file mode 100644 index 0000000000000000000000000000000000000000..9372f72cc300936a6ec7e829add68fe28ffbc2d2 GIT binary patch literal 4327 zcmeH}duYvJ7{}kk?3{zKh!tV3xh4KUM6)?-TTI&`lW0RBm&RNd*+fe=mgSmTnxr%> zk}2gcBFZh1WK6M@`)zC-pD*Xk*?zy@nLqePd)8;~`8~hqeV^xjp67kf*_JjfDXM*s z_Qsf~lw@B9W32E*@;^5(?*l``!uZs9V=8ubXvl8Ivnw|vDZ%yN>hMjnoS&SLYE0fB zWAe8c^A%P83u9J~G^RGonDP6JiOD&5A$@)^JWj$S-bipHChJS*3j5&ea0 z-SN0JDBY`4QWM=Z9&faJ{JOpIwdg5X}y0I0M5JNbQjEozD`+)aEi=M&msy~w^~Q&4qc!v=!&a>S5OC? zp%^B^dZ;+P#N}tS$R7oOW8Iltk7g>wK|hf0BdES!P#{m>EDVM;*b0Yn-oR)pVFL)H ztrs&_KoZ=AGjI>8;T<=I^>*pR-p#u; z0V)`~f-s(O{!yJOs~SC3;IaoQ|OyPG`5s!Fe?Abi}U0 zHQB*sP_RFp^V#tEErZ_0Lr<`XQwfG*`3S0-&tO-|+6>4BWkI5yoq}3DG?P0#>wCXH zR6!GQ%77cIPw>5o^{)p7pko*syw=g3U?<;Ds+3yOB2EE3!Eyj}vds9Us9^}bSkxnT zNO`C(I8{ed>3z&m`rIHi7gHM?Vkvt!8e)byy3Rpow6wEX{=~P)RM) zxOlTSs#z&4hlG$I)ST+-D3}eCzy}A|z51Y00?t!W%mLjcDycD!?5X0_`p(ahk6@A#3vwn^_A( literal 0 HcmV?d00001 diff --git a/lx-icons/32/home.png b/lx-icons/32/home.png new file mode 100644 index 0000000000000000000000000000000000000000..df5c3ac206013f1436c365e073a1f8e0b090621a GIT binary patch literal 546 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#NP-1?7Plzj!4xIXba3Y}F;u0S$0#e2$L4LtNZ?kD^ zt>sWZ^rP;3J^TE>zu!kPtJ$6IwwBqJ@}aW-l+qKqhle@kuZASQVv3v4*W0PL>)u)i zpmxS2Z+91l4pvzYAcwQSBeIx*K~EWk87r3BmjMOYOFVsD* zIEGl9zI*8;Uy}n*L!#9VCA}Stc{`e|Z+x#eXHUM;xAfzxy#+t^Z<)z*`qxgz0JDz0 zA?rdMUu?Cq>UAo7-;uZ3!Dg4(pT2bWk{z=7bN4z~6(4;eZ~f(Wra9}DTY2qF>u)zt zZ}^w+B3PhBS;75{A*=9X$@u1%I-gt&!n>Dp)NGCFPT1U=I^oSXb~zdU=iT#6PG9;X f9kbN_J^ypIFZZ;MN*2EcMIeKxtDnm{r-UW|f8y^! literal 0 HcmV?d00001 diff --git a/lx-icons/32/list.png b/lx-icons/32/list.png new file mode 100644 index 0000000000000000000000000000000000000000..1e47a0e0806bad6770eb6e87cc439391e61ab316 GIT binary patch literal 801 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#N0|TR1fKP}kP=RgD;m}$CJ$jz`Px%!%^}qj=-<}g* z=CA(mJLzl8jQ`>xUVf8*1WfrGFy&9clz%>xKKf7o={@nidHuG?IsYp*{dZ`)0Mr;T z^&e29Q^z&G$=^VVr~U&f28x7E{|_`14M8jdDgc@pIt^3yH(2{0pe=BXzEi&f1^uS} z06G9>{$HR=;0hoNpp9T-fhPY&mNIYN3UWWlReyaaeSu54_TGny|M8me7Q>J~aFw7y z0BeUh9w_cVFd!SC;WJrY&BuaIP`y&*Q?3 z`5V`*vXC`VVPa$kA*Q@_ZQL%cEzM@Eo34mvpEwrEXcFnj!otnPsBW*t#3sPG<1k<9 zr3-8)Cv%pSvT?Ibx!Mu~w2U#y+uensgH_f8$l)yTh%9Dc&{GCs#)_r(Wk5mp5>H=O z_LuB(T+HT)b@@I(p`D&Cjv*GOlM^J=8YX(iI0bb{Zf6q9l#H~jWOY?dO5F?c&w#Oka2txNcbT^!E5#_?``D+^MOpcsx*WLsUdmVd3Lx&o^${xOMaM z(t;8v#&dcG?w@wZru8_%bB?u Y*q+;R@VA#S0zJXt>FVdQ&MBb@0Mmb4{r~^~ literal 0 HcmV?d00001 diff --git a/lx-icons/32/lxtools_key.png b/lx-icons/32/lxtools_key.png new file mode 100644 index 0000000000000000000000000000000000000000..01f50a673ab4e8b4c01fad629733acd781281351 GIT binary patch literal 1371 zcmV-h1*H0kP)y{D4^000SaNLh0L04^f{04^f|c%?sf00007 zbV*G`2k8d`4k#686!c#J00f^&L_t(o!_8J(OjK7CUHjb23uS{_POh*?JxDX@*2WQ;B8NpgNP0Rh!sSLjgG|PlmsN( zXW&*{Q|qOh4aEZk+R=(_`8-hqV!TCWy_%VG!8j_JwT_-3&i;89C(c~Pyg4(cuUWdF zBGMf3TG$jA#+#)l6|<_YC8E6mG629Fp(1}-I9v1;`Pp8(AEiFzQUKuUc4^aR_~**EXi;p*-B zgV5zM^^IM-6`~vvoMQt6kJ|yD+b{ymd?m_k;;aQ}G{>Hx+^zR-m@+wT6%oY%Fps*u zrr}0oGr*`djsQ?YfS(9Swpc4{8H)hGHeQgw=^^x<;2@Zf7*+==T#im=d;)Ja7}Wj>Q(g-Fx&{mi@cR zf2W|&xI(o4LldM-h2;4FM}VjvM1DyAc4cl(VbZLbqpCL;hjr$6E8UK6!zJQg%AatJJV4Fk*r#BBC+?5dfen0;`@+ zMe5uHT)cWuzj*z=SJUN36>dkTF&-F$v~_P?ix46jgj@h5nQ_0l4JJh(Cw;DnHmg~U zE$y$QzrOiG?ePNv!xaDkXSvTJNSpv+b?9&+ES{Hu%!NttHw930`A$I7^&P>1!DBzX zSICAE005__Dp?Sn12Aip%t9c>VnR=_AG+iqGq!nMd4~)qFyx1gM09XOr)2;qnDILi ziUG_6(8kO;UYEl!j3%J7{1FV#$OfuQ>GZnt_JMi#5Fs0Z)=&5uj)(p30x6k425@I+ zDT+YxTRlDjP;y9h!j!NO0Dua&Bf!kX0D=IlLeOsti8CO45fX}VE^Gw;nIG^gGrtd@ zZ^)F(hekUF d_2d79zX1%*(;q&`v2_3d002ovPDHLkV1nieW$OR{ literal 0 HcmV?d00001 diff --git a/lx-icons/32/media-optical.png b/lx-icons/32/media-optical.png new file mode 100644 index 0000000000000000000000000000000000000000..449ab36e1b514404181156c4da8a50b0d4c358bc GIT binary patch literal 1055 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 LQ5(6wcIWXQWoO`# literal 0 HcmV?d00001 diff --git a/lx-icons/32/pdf.png b/lx-icons/32/pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..34fc0e6381b445bd1bdee1ac0a67a49a3f6bb51d GIT binary patch literal 1070 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#N0|VpB0G|+7pn{`5Zr8*74?5d@%1At5WwPJQ;DD+A z0W*VdImuT8ymp%z?lsllYob3_TWzkk`g>>VkIvRWEysM^kNdhG^L0Pz=W#D8=%A~^ zAqT5Nb{0T%+{xxee8kVZ^aIwW2P}-`g=_DCu^##Gtk~?qPGi-rf8_fNr~smN$1N; z0~H(vS_F18#I7UOCa;sCzGNouH#fZK>;613@rz&=7#%C^iIcwpG}TGXk!L+ z+ns5X&lKh!w6nZ5b<*jS_vV!yHOnVgLKYgZq%vpAg`|KiZWqn<9; zyV`H9Sa!Xw=~P7UwJ8(#dN^O7GxK6z)_!B18-3l!QxXnEhTdDd`u2q0t2GrD%Zkqz z=AMcUJDV7DXX&ET*=grX3Qm_59j`7w)7o@r{o1SZW}m7kJyn=@)Xm|}oSA3pYxW2E z?sm4@ZE3vQNN1Rl7#*^+Je!tuV`AUM&bHmA`uj}u_899Pv@*TY zP;>!D^SC#Q`(@|NsBLTz+sBFtQy>g8YJk zG#cQNmXVR>UkmfJ`Q>7A%_qx?xxNh(8 zna|R~r00O$0(ZCL$J7%p9awXijp6SVlQU<|oz>UTd)dg65D^y{8-4%Aom=;AnoeT4 zaPQy2hZi@VEGeogt8--7v1ix5ouV01UT(aJe?|X! zedAR2isw(2zxWpR3uFVdQ&MBb@0KyW_)c^nh literal 0 HcmV?d00001 diff --git a/lx-icons/32/picture.png b/lx-icons/32/picture.png new file mode 100644 index 0000000000000000000000000000000000000000..9b8c448870f74f7355d64ee6a74cb76cf1a42508 GIT binary patch literal 1441 zcmV;S1z!4zP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00006VoOIv0RI600RN!9r;`8x z010qNS#tmYE+YT{E+YYWr9XB6000McNliru=?5ALB?An0kBR^Q1p-M#K~z}7?Uqe! z6;%|+f9KA;p?z&BwX|4`BmxTs5ebSK0>+PxF^Y+a(T%|ki5pkO;6@W&>Bhtj?$CuF zse%IH2S$irqy_~NsvrWk2BF_A<-K_`Z)WasG4H*;*Vhlw5EJ7`ZYDGLp8Nlw|2g-} zh5zkeHc>soeP7;2qnmU^)_DY>3*;)nDJT~l?CwOIf&Cvpj@3EY)=QPF! zU}F|A&W7xlJm0mQj?4sl<=8bO%EL^bT(ZUZS%FD;$OipG!JvAv1fs08C zJr`G(XqQ4Oqo7;}+c|RSW`tDY$buuvmSwQ96TH%no=M-gECbKztf{C`K!6C3_eLM% z*2Z7Bz3t?bc1Fn+8+rTuW==*c5rJzPU{fdDkcIn~DD@>JtZ%n0%m^dl%sr$o1tM_9 z-pscCZ9F;o0e3IzCF=zA`CWW8@&Nn8hl$(;bTufitbuzv1=p16*PAEM=D}!~*2?r+ zs3)L+F`Q)$uZ}LKWoQVO2wz&sxg8kSMKz6lQzvtR19WAD*Vn=JQ_5!-Kvil;)Db{Z z5@LkJYhj$0N_r}-SfMSWWX$}X$a931t*~{4(lY|1#ag;%MlYFq7@YzxJBq-u;gG?6 zG%ta&X%eF|v@ds72TgxPB5v(*R4@XE$HsZ-+plw3B_m@1xOVO3lV0+w>?64I7~<+7O3} zrWssQS1q*!N|D+)hd=N>k^d`hb_HJZs#GR5y`&EAdUE~(~_ zcJvtntreuSA{akFIC+?)ID|jgjZN~ECD!`*`8_1bC?FUSj2Mg<1Va*^At-!-Xo3+c zWByK9VjCCw@dtOIHUtdeL=WNE*Hdx^hX});070f5Y7s%z5)=*+MJKo%Gikx4(W@=u z5A7l@^i=@V2IPl!5(no1p0*C`~VUYYlH#WYARAnZWRViHB4_*^0I!E-? zJ|VvUDV}!=u6zCL3Pkzeh=WP>2Y1>i*PDt`4WNn`gEk2&5pvnrQX!7|@%_(GjcaDq z+DPNbY8>IXYubrNPfIxY{auQGlgPAgB?8SJ(!5~a$m>!ekR$_SGB@J7U1e}<^Amf6 zvqyK?Fdw=8j&8E=Zk^P(>At=F@<_eB_Hv^Fd%nA#QpQ>iD9Rlom!CwS}7sVY1AHNwlaoE!-3c zxd{m>FbK4V8zB-UEJ714Q^IGWr zWkohif(3xBq}WkG*JOE`4D{RC*tkp=t~R$c7wEVj=BeiCo;WLt^2l)Sp_{Vi#o~%m zpfLkzz71?pQS&rVe*~DV0**ZZV(VI8m7kyohMLnw4oLE+?QMGtm6+>_&pUy`sq!QZ zk565rLgUqv(gNd*iH%IpY3i)q57;wH9J%Kz%_P}Awm>y@$1Vf^mjR*`KJ#8TLkQtC z4*`+BJi>?iTuI9|SeYtD`kgndAiya}QW15=YCAX8Yl_5BjU`CXQ-AN^ew$aO~47{}ENb@cMFDF;w0vX~M zl1)YHUMkQ8ARAsdU_M?#8F<_Ki?8UpJR-t-e&FHgQnXu8*OUqXC%R!_30hoY2DF38eCQp)J+^=VBvHWZ_Zd;0zYTrW^+$`iTv!NfTmN0~pT#+;IKE#Mf@xxq>U4fD91AA|@$k=hP+TQikQl z3Cz!ZQS>B9pe*dzzCRqouO8G=py+pFswpXM_xZH`-|M zHH?0Gilvnq4EDDnB05cX9fS;kOZHl7SC1z%E7=6If0b?Z0D%jA&& literal 0 HcmV?d00001 diff --git a/lx-icons/32/search.png b/lx-icons/32/search.png new file mode 100644 index 0000000000000000000000000000000000000000..f97a8f7126c8d6d66197626d18a0ad41a1c3e635 GIT binary patch literal 978 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#N0|R48fKP}kP{IHI{{yG~510z1L5xvE(+~g#@+af} z-+RTAVE45S$tIrPHQV=VZXY}dVfap&oqgCXq9$)|Ot)wh0Z=MH>5OM<8TeTCR& zLDnv#NJoX+9aB#+&OgMpcEuIpl^a;W83KbHqJbM%~fsD^Rk!EIO(kaTVi^6 zRi21szhsveWa9pRl(P<~$H>#gF~s8Z(Q_}&nF1x)K75?9 z>_t$ThO0}au$RlCpp?`5-k+Q{sdn!ExP{N=%(VQj{C@lIJ^Mf3Yft=F{3>GF)VPMW z%de!QzBXtvWM-L3L{}`_dX`0$p?LSfMVre?vT|eZmT53txcs_cT0e8G-u89}#yw*3 z|NXiCGuUgeADAGpVw!V-g^K9frip>Irp^^PHcITzIyF`@?oeC)q~XXTPEH^7;4b~N zw7I4e=51b@+HmmCp-1_K2`6VXGPz6(58EG{aCZAX#rxBfUq8FHO`hTA&AYe5Wma@F zJ3oB!Xxo$EiPHwJ_V^1OO`@K3I0Pe@45(vXId)e!>k->q!& zwyO{d5jrP|*W7vK9Gdv*g7O-r zG8PH6gDu$yP{!^rEXs==h>LbcW%j;3O_rqeLU&GSS-j>->i>vGL?R6QUk0@4q%Udo z&Bb31S01={qe|Szpa84%$zi39;pbOj2NsD#QVXd~* zE<@{2E)FixwVhBC6tG2Nx>$HQ4O69Z5$^U@8$ja@m{djpbB z*u7PnEJ-a8#zfL6s0lV*6C<04sQ{>#wM?<`@25JU)>0_!Glp*6C@&&x^iafEuu#`e zX-ow;G&P2YY`90jxTZ33ScT^GyEq!eNq-M$)!8+elrj}?on6bDc*&E6r(C~J3^P(; zDA6#U($#N8yXAXrbs|g!_#?8WV^RoXH<05dG7IdR=vh3Vs~q)W3zMjXQIpu60;8jR zNeYs5tyWZ$4d*eCi0`lp) zN{9b4dd&C;_yXi69D&Vmv?ehIH5s>XB*%TK4MUO17+fLugcKc8Z1;f7B)Qyh>qAB{ zI|$`rNzej_&<8F9<8hSB=qfk?o&qb8e?-EPpanqV2x}yFLJjx|UVwE`nkvV3n0_{p zH4YT{HV8|C?g3*2HlvI2VBls#zZ!i9NB|#zuyYc>H?$!o>;i&Cq6pb1awH#+IPCQg f7BgatF!0Y9=+C`Bb987$izF<}D|UNxD~|mJt9bT8 literal 0 HcmV?d00001 diff --git a/lx-icons/32/settings.png b/lx-icons/32/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..f91c7257231bdc42a036ade7faf463dbb2c40c62 GIT binary patch literal 1248 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#N0|OI#fKP}kP(k3-{{xFcrvFG;@HlPJgNT`*FL#KaVa-#jycd38>*#G@w`}RwC$K{-;Ss&mEAdG-1 zf3ug|?ApGzXXmPtRcC^y{X$bfMQ*^9|GCg>_!zntHA!?%sMjm04?LR(${`tdu|CvW`|2%*B?Z@Yje?;cK{`mXTzte}lzWMs?*DM3Ei%&oP z`Sf&xKHI)~@BX~oBoKMz!>i99ShW5;`0?k-uPTYlUmv{t_3QhqPrtvvFb(bHUgGKN%Knmrg^NRAR*5n&e=xRtx;TbdoIX1#G@RK`pmnC0 z=Fz)g5Zk?5th~J3W7~!U-~1=(vvYdSPXlTwuwdG zSXT(KpD~aKK5+WCHG|#0x^@2;IaV_@H#yJa6x90tkF8c=8L}XsadvQgU2Gr1v^@pd@?1y8Q1M` z>J3N@-FjY}$#m1L0H!Nfi)}7kSh0+KmPs#z$@VQucdq^OW8AiQ^27F30w$N9_Ux{% zitKy*>lgcvKpw7Tyv~O?`g{6%{eAp=lb6hyDLYU2N@88xmyH{CY}vD^>*B3n$DU1d zVaR#^VXjfuRxahr?jQQ)-zT`8s{I%~Oa6v(NkvJGQ{&~z!gUYc{CQNgpKV=~X5nAw z4-SRJ-jB=7SMOP0^}}}e0*>mMNq;83tzXHXxMl9P-=S;|fU(5j>FVdQ&MBb@0H%qZ AVE_OC literal 0 HcmV?d00001 diff --git a/lx-icons/32/tar.png b/lx-icons/32/tar.png new file mode 100644 index 0000000000000000000000000000000000000000..5043933653c769b8285193659947ec6c1ecde8db GIT binary patch literal 1101 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#N0|VpZ0G|+7pn~E9y~#UL zleVP=Zww3G5bm=+z`-OtzVe)v zdFe|tw_V=$@!Q9m&9%k*fU@NodvX$Xq{M8Ej|QS`@ll&%{bvTcP4rxPYWe%G?~|6M zMsAGB*qxKTCpU6SED&Yw$P3*V;lDn}e|>Q1h6te55ZfUR0J_0*rLXr|5NXk9<-Wwr zZLzmmy|sD0mCHO2&lSF&t9)JNdYIQ)0X?PYqpX#rqm!zqm87fSqwK#S7-)z$(1caK z9#g$1@1HvV*n&y>rueJ_S>d_LCvbMi-B))#C;K=|aQ0g5=Q+)1^1dk!6P>-M_%1lH z=`>SSbn(4XP*R9htDLpAMA<-kk!=cs5InUMK-@m@TJ|G~#CEwL+iC=I^ zNLy>$_kO(YeGOsk?9QiCvfAw!$lBUHtAldy;mfPCYZ-YpvhZv(v*j zN6$GwFKK6**E;{?o$2$=F8~Hh!Sq2GRNFG9Fli#OUgU}L8&{ET#FWR>8yD4YPk-hkhX!g zkju4}wLsGtlf2zsn*VG$e+kIpEbxddW?;}$24TjErS@e&LG}_)Usv{*>{48+ER%$! zG=X}uJzX3_EKVmUDDX(My1E>6@QHB>@``c`<2fWcRXB~w%Xsq%Z4E8W=Ekm7vv##D z6Kh$#X32^LXHOkFux|0|*X)e{7#kfADmF6y3#ePMex4mW^YX@p^W!C0THIaO++B}5 zR3_HdxgCq)xudr1pTWc#FIGG_(NQ2_e&+s_mf4NR&&cQr2uO>|h)Xj(Z=X5)V}nn_ z=ZkANxS3}*tYNsz#ltEQwm@4U$F;^ONhnU6X>xGT$HPqHi^`8%e9@r;8TXVDc*|`Ife2M=)KhvLK z&#%ZIb|5>kQ{cn*)!&>a@o(PpAoaoKO?-zLoere v9psu5d$+}5=JmUWFLP^u_*ST{^q!ev-XXgTe~DWM4fmPhEE literal 0 HcmV?d00001 diff --git a/lx-icons/32/trash.png b/lx-icons/32/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..2d39cfbca6d4ba4928c7a8b9d693864883239f9e GIT binary patch literal 1027 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#N0|Vp20G|+7pn|}u|AVIe519HtV9I|W8^oRd-?jY- zt6eO!Z6pw}*hR}mO^8_pl?5sYnDWo4aF1%z0@b92y4f3jCwzx!L?(fz0gZ(qkT}e6 z6g89o_)q>FFy(LHlz+(LgO&{nBCw}`E`$dcP{g9*lwQteV6d1JAF!x6Xo?D*lF@HQg@mj|6kSmbOR$PyCldj7)S%-jhUI*HYvfIgV}Q0)M*z#yuUkV zrms>+Rb5?mWmRomf?ng7&!0fx>l)5UJ2@&AwtN1}GyU*4Oy!Ba*p*j0+z0Q-u&h4G zKV=JB^_=8ppI=$#AO8fYJ+l$N_Ck~A(A7y3fgtAY_VW)xmL+++yL7c?l$QZHoCO|{ z#S9F3${@^GvD6+U$X?><>&pI;gGGdudo#O~EKrZDr;B5V#p$b;(u0`{1=tdl%EdM` zG}(%|d=v?Iv)BC1-UUhaeBuY2_L^U*e|xB>ptIiLKEL(JCo|71%P{$`>f+O?VpQlSkdj4kK&^%&Q! zV;0!A)AiPz453z0#}9l5|1$T<%@^3hk#*tLH|{OjR~Iav%pQB!r8d}huT8->!v*yX z?9I+R5^@g@zK~$P^Vnv_jFbk0qs=cR*(OBFomuJMnKX}`yM?veTP7mynrTYvRMu=c zzBTz94s1Kg_&)5%PgS-Lrt$ZkZd=RTxZC`l<6l$1zs^Mc8{dl@zQ~-ga}BK76#r3s h)9VXooA%GmKcPKi)2Z~SdB8Ac@O1TaS?83{1OQnN;)?(P literal 0 HcmV?d00001 diff --git a/lx-icons/32/unhide.png b/lx-icons/32/unhide.png new file mode 100644 index 0000000000000000000000000000000000000000..424203c6865c7fa295c8f0bfb996ff180909fb0c GIT binary patch literal 4327 zcmeH}NoW*l6vtn6ToQ+9KrrAM7Zex71x9eCLrc;~#I*atA<=^yN}M<cr3bLNtTnB^WY^KUDCA!T|4lD z?|}0q-=8?>MqFA8HaUME(~`6tC_d<_XO03j*O`z9TKGL^ z4mDpbS_idI!{B`!Y39CD>C}Pwf4NSJYlE0!0~El2a1n09Q}_rHIWPbw1HIe^LJj60)A9-=t{dZ$`Y1uCgq&|ZR4QI6aVsSfRsw*LwEB+P+-(3IDU z)%`kJc{P2Wu^k{sZo+1`3Q0m*27?@}f@(t97?PO0Zj&GfBJ6;#{Jf)BUo{LS zz);8niK;+Jb{p!M^kce5a@r0sagu0f2tb=Xchw;WRFY9T59B~#Wu#;KH9FsHF+MCK kEeF5#4y5H&m(q8=16ykwCY@ct8RU2vo2j zNjM5}N)QSa2Zcg8MuDkD>Cn<*(P8RXQE4qQkk+Zb?hh)%-`$zr{odPe-}~O%E%Xr| zHKlK%BZN%(JdPjUZHQ@NgjY^e(I{a=^ZY~zow7$rc@Cl1*rl99=;S8|J(nT0UyG1M za!sG_L4?RVe1uXiCOlh$c?0}mfZq-9d>Q;JL81ZQ3h=oE-j_h|1@KCtcpU8F!A}kO z--4GQYUbVAmTCv*MguFvircR2KhQ1LB%+rJ<#$!@Jk^ab7~-=4dktG z_9lqSq4pk3JO!y1z+%>$YZwO!sDi(7luBd(k%{r%Jy>KNG0ctjtq`{r}w4yWY7om=);93 z{n^HyNt!qQsSA5~fBm%CdZyLbxan=I^zWG+WNW8)X!h~v(zs>Gh##z{`yeI zHe%XZ(Qs0d6)ndFOD07Lj&jg>$~GQ0-b>~Mr6ROvCoxHx&4<#lla|I8acR$J)^wx2 zk=aQ?eCITu!V%cZQ-hf+z;Efw#E29wAmGLK{2eZ z3U-r5I5&_raoOtoW2&j_z#64vg{&Ha*H+2VLfMVA9J05<*6f&C-3d;HAoOs5&!@I literal 0 HcmV?d00001 diff --git a/lx-icons/32/video.png b/lx-icons/32/video.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5de25c38eb0bce83164bf7ab4c13e31bf3455c GIT binary patch literal 760 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#N0|TRGfKP}kP{D+`4<^oi&^+;W%fvh7Z8r-WZxlA( zENZ%0&~Pm-XKQ@U*8l(i1Jz8L_i)nuM?jUWlW#Zl->&PuQ`d8+q5n?XWRR|s7KlcW zUWj&x2|&{#)7NB_AIqz~lvj5NNCMeW>1)jGGabEZoV@ES?6VLyHr}Y|zTMb=7iesG z+pU{-zkK-g`~AmX?>_umvFUk!!wsM}=dXHN&~Rh>f!7OGJ21szhsx=A7EM^>;O;KZRkA_r!bM|)76#>H*#%iXtZZt_(h?H# z5?3xxUfR6Q;r@j)Qd~JXrElKIe$Xf=DKOezcx>^3qgT&Lt!FCd&;G+@vvIwF5$fpR=X%$npB>u5k#S-L7XT&fxgFaVwL8Ryfe}44$rj JF6*2UngI6IV^RPB literal 0 HcmV?d00001 diff --git a/lx-icons/48/arrow-left.png b/lx-icons/48/arrow-left.png new file mode 100644 index 0000000000000000000000000000000000000000..528be772cda8d8a9aa89068b128c6def931a52e1 GIT binary patch literal 875 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s3dtTpz6=aiY77hwEes65fIszpdK8=7@c$;HiBlsYU0#%{Sc%n)Hsn_*?K|{!`C2 zo7ot42V?-PWK8mQcVXyYmGuB}I14-?iy0X7ltGxWVyS%@P>{XE)7O>#CA%CKv&z#0 zdXs>9#64XcLp+YZoe~~=$U&sFSlFR+QBvo+y$cs5iBvoDYG`yt2#8c$|Nk$)V^3Pb zvwP{qa^>gDci%TV%<*Zy^DHL(Xyk~_)S7d&YZjXFZ_J`3TrjZ)|M{5qpUD%=G9%Cjqm1MoBRB=o`r{=-p1bx zckt>g54&?Ut?;hteJ{<4Y#Y{H(2|~QmyjLZ|L(?a-A&u;A27c#V3v`cUvcx<$)8U< z_5`m7T%7MIL@{BDifDf8_C<=>f_w4!W3D=6++<@9!=PGG&( z!nhi-718>odrn=szvb8O_5{9FHIH6Lf0!(oS|7B3(t3Rlfyev>){gmeO3Z*!2#iu! KKbLh*2~7Y%yrcU7 literal 0 HcmV?d00001 diff --git a/lx-icons/48/arrow-right.png b/lx-icons/48/arrow-right.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ff69bcc55218f6e57494ac51e18045515a0194 GIT binary patch literal 816 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s3dtTpz6=aiY77hwEes65fIEHNiu-v3NX3){`2{mD zaIk8v?Gj1@V5nxR_O*9?+Wv)WhNF;uzv_ z{O#oM@Iwv)tveSuEa{loz#G`*wj^@nqyU$LO?wag`G4PW+Ho0+^k+9~&R3VepS$<* z=gL3%4D}332M;9~ur#tHUYe%F#Jb3^_tEJZ)(H_8Gfgu&?s+V|o>8l;8Xz${ddf{P z7xqooOOCQ!Y>ZW}($f!Y;j$7vdhz?Wzf7%_0ZT3=-pu8mnzh!hJL>O?A1zyg%S-0W zHUDCnqSx`_(o?SR>*m{wGooC|PKUF#c|$i3C?auRL6WD3+h>C3dbwmf}u z_1`a#;L*Ro{w3ZH)c*DRc%IoUt-O#8oQvDK lv@=RAZPSi_{ZKH2Vb2xAea$?RHv)r+!PC{xWt~$(696w5j12$) literal 0 HcmV?d00001 diff --git a/lx-icons/48/arrow-up.png b/lx-icons/48/arrow-up.png new file mode 100644 index 0000000000000000000000000000000000000000..82f5363e6b005be72a7f4521a5bd0461817425dc GIT binary patch literal 10294 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 literal 0 HcmV?d00001 diff --git a/lx-icons/48/carrel.png b/lx-icons/48/carrel.png new file mode 100644 index 0000000000000000000000000000000000000000..63e1cd3182a0526626e9402e9eec95eec1937898 GIT binary patch literal 818 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s3dtTpz6=aiY77hwEes65fIR ziHVz!mq)a6$>MHxj>01+Pn2@?Z1eg0J?Pl;ikBKioO|voMF07l82vL>4nJ=qZCRW5rVYGN2%PiKnkC`%88?E@qXd2lOTZ^$2;oIEHu}e>?eR z*dYg=HqNE4D_VoZTm@YO0>UCi7QRzz>eA6W@Y|k4_vD?kbDF2i{J#5la?Rchq3Nd| z{%6c%iI`@yY0-%|PL{vccKcVY`WMT4O;&*8mEvK8F9j{x4I;5hhLWv&YtMXS-nT$z z(u4~E96@n%oGi_+PKt0H_xX_9JHc*Ym0I_qOupiM2gDz|*%PrzBYc&{6}?xU-7bqy z&X);^o^BS-xIll&ZO!i292{G(03K z4%4Xc@NkG}UO@GMfj~CU{DinzZ*Om)`9KH2ftI;lSWzR;Mu?>#d(&%d3px$lgS3M) zH2sr-Dg#2ofDQm!8WEoy92M*79~2&+tfsE+=@+P~s_GjYW^8JP=7z-hxbTvu@Zu(* zv9>_(lur5&1m=a@K;x`Sg8YKv4uCS0?VVkn9UFfB`TMt_p`pG$?OU2$_pwvwe|O6< z@k>hSy%BpQ_KIhXa$*`|_SR!rKwXSU-tI0zya~D!fE>;OkH}&M20djEW~^9hUj`Ip zFY)wsWq-*oC8R1=Ja6VopwK-}7sn8f<8QAX6*}a=)9~=oyMQ~Ieue3og}R^q={M^- zw|l04Kh{`xJmp{ZAp@}A(LLK<_DHf%%jr9PU$o0TVB?1yMN2n*t$nY3RqFibtyRuej7!}9?pznP?_SH= zn^w(HzS2L!-@HA?dL{Gr!2=iH#yaj@$ILTl-M<75i7&B!OY_Z{4C~*sWtPSC1+KcK Q3iK(1r>mdKI;Vst05e4UN&o-= literal 0 HcmV?d00001 diff --git a/lx-icons/48/device.png b/lx-icons/48/device.png new file mode 100644 index 0000000000000000000000000000000000000000..07a7947ba5f0154e1a91525deccc4357a811f8e9 GIT binary patch literal 1339 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s3dtTpz6=aiY77hwEes65fIrV^0E|=a?EQa$ z)a;TVzhEHE$S4`*>epUfiTZ&;RWeWM6k)l}oeY z+7I7*&q^ff-?V7FJnq2ceQ~O`+2tELRv8P}Hoark&FW57_xrYnGv~?Ocs`bfuSG#0 z9o=PjEPHiUK=GlZ%n9Dt59GzqacrFLVd?cVy*m0rz>$QW80oOxzg?YgM@_VdEnIx` zeWT0z;?sHur}2kYUk=?2a$b_Ry9+}HtE>l*!&%@FShd~O;3ygz!khKVK(db4 z(pOhZZNl=3Eu|%iQD43Unr@JCQ03|E5uC=%eCUXXR$|*DHML^yjtxsixmS5!GutL0 zX}v~D=dGbr^T~sP+u799bsnC5qSWi%tRlUvY64%lt&G&2I~!N9dlgkDTz|mXEu*HN zFCQ6iU%%r2%o$8f8?!iqnzcCiI9YdE>By)FC^m;S%e!=F8hP;xO}c0(U_E2Tjg6TT zN*YfcJ9aSXu994qTa%m^FI%U8=UNq)S>9r89XFRJT%0hAZKBV4hm3+#Egh+?i5Dl# zWj56nU#O@ruN3y6#no9+g;DvEqQDEW2OAG^YDI?hTnKo?D){-_(Z!7`MW!uE_nz+P zymAlIcD97BYn&}B`d7ECN?$dr*PZ!7;MJO-18c&AwRudPw(_lKOK>~AK0hNPr)l}p zG}}K?7lN~+PUi%f7(^c5GHFp`=gPB5W}H$pX56w)o4laWb4PHF*+;1vYtHUYP*qCg z^|@wwm$zd|_sW9?OE$7|ntc2A)!#v@Z=-lh1;ea17egm0wMAJ1ergNi5`?1uCZu-7 zA5M|mqVRE+QiK2BE142Yw^-jU@zhM!)N$AuTGeL1EvPE(rp~rBod(}{Vo+jdSnjJez zRXX;_x9*l~*s0L6TeW?+PUlV_TfBaUOw%sawmk;jdx6dXBB1R+6EvH5n9bM&bP^DO z6twRF8lu~?AA+>I_Gz~7mT%b&G)kpyk5<=S>84#kF3{Ox^*clwb_>^Rff0y+b^*NrbRp1Qpvxs1b^;wQ*8*`E&{IIS z?N(^s6*TAQmNU05-gJy8o2!c{_rIrwY}bTeiHW@udj%q47{uq_`)?0F zlheA>r`9^Kibx${o}&!3kuk~J-G!lpRn`N@;VkfoEM{QP14`&AGgd6MF9Qm)mw5WR zvcF`Pl7sn8fQmtVAS$(DT!H*)G{ zJ=BTJv^{r z-#<=abwLJU^)LQ>e1eQw0=&GljY_2i6JCA!z+t$6?c<3RlE&$RjA`dO`X(}DP3Y-W zcC+L-a@32-)Z?hSz-mRsIIiHsXI5@bb3U+UrE%v)gY0v6DnB1gIJjk{OJ>B53_}T> z$Xz@c@`6&+)<-a1+)(sV%S6_~WKA5?)}*JiwjQzIT$lK9lIrVgla~N#-qW5}HdKWi zZpgf`Bhy$W=axrHn{M>>-1es2=yHLDiPyHwEilLxGn6V|HZt{4SMyc%`+H@HOXdQ$ znNOyKJTh6bZ0TtR(-UbaX{pZz7&jGvHhOZPG@#B=F>ryx{IXE{SVjiNvZ{?ASn~Zq Osms&V&t;ucLK6V&(j2}3 literal 0 HcmV?d00001 diff --git a/lx-icons/48/folder-water-download.png b/lx-icons/48/folder-water-download.png new file mode 100644 index 0000000000000000000000000000000000000000..4e36de1fa72db2b7a8870733bf314065d728bbfa GIT binary patch literal 1382 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s3dtTpz6=aiY77hwEes65fIo+jdSnjJez zRXX;_x9*l~*s0L6TeW?+PUlV_TfBaUOw%sawmk;jdx6dXBB1R+6EvH5n9bM&bP^DO z6twRF8lu~?AA+>I_Gz~7mT%b&G)kpyk5<=S>84#kF3{Ox^*clwb_>^Rff0y+b^*NrbRp1Qpvxs1b^;wQ*8*`E&{IIS z?N(^s6*TAQmNU05-gaQur&t$QScAxM@EWC-;E{4q^p3Nc7zVQaHS01Z< zY~Zv%MvZ&8JTh7B<9w(5P|lbiJpI3C&l|~zHvh@L?HaDz)LpizyJA~+Rj+!ZSMNt2 z_Z)85OrQR*axs%7!#btHIs>Ns1BQjpCtn#LRa6q>7Yqs;Jb)1d3})`yy?weJ8}H_S z4>LGLpT5Xs5qtGKi-%F{)yJhVZmuq--2a{yvRxB?B_{St>=lTFVGy5x@4r3#Oit@g zpIYm{Dk61+d5$vBM#dy>cNc~ZR#^`qhqJ&VvY3HE4=ACh%viD1z6>bHUgGKN%KnmF zj*Cm}7SEUOKs`@9T^vI^jwdHb$TbAUISTSknKF|@BRwrJFf_QGnb%i0H*Am8jgpeD zT@xHO?rT)Ew&Rs?JEp3!;L4FJJ;MELdd1yFA^|~JnW?#ldxM$#*TzcD>NBclcUMm@ zdGP4fG4AaPS$L;}hb(H=D(Cmtw_DLR>C!8yKMS_;tvGSJU4GHRC0q6_+{me)k+VWy z_v2S#hRh9HGx9QXv(*`HS*@C_o5R{D)$)hgYWJ?{D$a&^@7A4Ts8?LT_VB=heg8Ox z)dd-Z)xY@j@d+|!3GnjHHY$}8OnCL>1Bc-PwvQ)PNE)XLGNzsD=$pupHKC_h+0ByU z$WbpQQ;(zS0;?4jP;^)<2E^WM(7y1JwE(l1`=>+A0BNVMJPH*0I= z=V@!Bx98k*snN*2y)W(Tx7;JGLK>21Z*DBUzHYAdvjyrJZ_M7@+gyJC-d}dUH|#;x zWx@}aG`DYC*V?qUolj`-!w+5-7Ct>~%I^KL?M=z<{Q?UgvT!LFMHDg^nR=+J`KtQ; zy|Tn5a{=4TCsRTmnJihh^fZI%iL{io)aL?>n~FahJvmSsQ0J%^xIkfkS*U$1Bg2zp UwaLAk!6hk!r>mdKI;Vst0M>3&n*aa+ literal 0 HcmV?d00001 diff --git a/lx-icons/48/folder-water-music.png b/lx-icons/48/folder-water-music.png new file mode 100644 index 0000000000000000000000000000000000000000..e1b189401c76078e98ed5b6ef49829d13d63a143 GIT binary patch literal 1506 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 literal 0 HcmV?d00001 diff --git a/lx-icons/48/home.png b/lx-icons/48/home.png new file mode 100644 index 0000000000000000000000000000000000000000..7d278afe88256cb832828cfdef1ef3e9daf8a224 GIT binary patch literal 641 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s3dtTpz6=aiY77hwEes65fI2kY6wZ1ET<& z~bp9zYIffk$L91B0G22s2hJwJ!q-vX^-Jy0X7ym*Zkq zd3r!^5>V)-r;B5V$MLsQZt^u52)N3+xW+W>djEUhqK@eQ|97)AyDe=!*KOGL`$~JU z(cIZvHbzXj&+AbrX<(x=Nz?UC!4H#A<3q>hE)O~T>Ld@X7mX5a2^m*o*;QZMpR4hfu3aWboFyt=akR{0B3L@ A6aWAK literal 0 HcmV?d00001 diff --git a/lx-icons/48/list.png b/lx-icons/48/list.png new file mode 100644 index 0000000000000000000000000000000000000000..575a95bb13639bf03355b7cffecb658847125d58 GIT binary patch literal 984 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s3dtTpz6=aiY77hwEes65fIi>W#{{p7| z37-1jbJB~TY5)DF{Pvpj%4z9kw~61)80zX4PK zdQWlGyNw2M3w?N zFJRiAz$yRzr~PtTdIji0B$eOcDuIG%)?tc36a&r2G{JB3518N|pGlvADt#t@MDoZV zB#ZulO-AtrFc@Ll{{oGIDE6H40vObOQ@sb?@zqkp4&HXCC$!KJpJ-Tw%^KCiwq=HlsFlgn3))@+B)i$b-lf2 zqzj%{$~-NNqjvL#P02$q5py${YqpCr_L@scm4asinC(fpt}u&k3oBh^wjuVJTV}Ns**7w6x@*t6<@g*^Tb6dC(XxxpPmkMMJ6k$W%{AKk&4GK2M?HCL`uxu6 zt=q#aJMA#fhmX5=R##MU8faGi{*lCfOhfSa*;m)^+c+W42@Mj ya3mzUo%zb5C1GqUf3+<+ruMRt?{uKS5=I6K{YIUox7J?*MX9H&pUXO@geCwE#<$x5 literal 0 HcmV?d00001 diff --git a/lx-icons/48/new-document.png b/lx-icons/48/new-document.png new file mode 100644 index 0000000000000000000000000000000000000000..81dc70a701f29747afc8eb23ddae47517d6bbde9 GIT binary patch literal 9475 zcmeHNU1%It6h8B_KiT{!trFcPm{JM0Xj-8nYNaHkCZVL5M5uocwIT-l5~zv@YOUJX zCm%#n5NeT-hiJtYm4XkF2N9I2p{=pTRvTk?leWorceArQv*UNB35h#1oB8S1Jj_|n z&g{A8-ur#$p8GSC9DaCLM{O(~Bcj@_&h}nhx3EUT_}(olgSg1gwsyA?eeq7U`cw$N zh5fx9ZNm8XcfN)nO;30Bb`!naOmyH)qC89oE)czdR+4*&?*D+Oe&D0yJ=;(a-n+A- zopkl60PK{r!^o)`gVxXf{3X zDtLAsI&K8f=e&OsD%myW#GX=w_{oIyHjy4uvhznHu_|BbW^PVtG0;vo@NT_zcw~kQdU)H3`R)*wniVg8+mxSCI7qa3$A=03anmVBTio zWD>v4h=kY;o>WsnxctcJ~L`;Xz8O^U7V&fp!2s%chn~7rpRUN;U!6x7S`pJ@H4sU@DWtR zn5`@oBcN+4&CQ)R5b!;V4!kppOryCt=|bGFm43m;RaR7t0H2VA#bXlgmkUqo64O$# zZNZYu@;g^-mseaZ_W^-4I(o~CG3`>p_s-o%}8-U&1h7&?Q2oU`>ew-4CG2l0Mt`$|v719QVQ)43}iRP|! z5U8)ei#Fc7*9lfjA9JggZq`Og3R5@~vm~HudF;B_xga4qN-}&)g$ZyQe#8d>fo|Kh zlNvRCNHa@zZi-Hx_{1pKwE1z0-C(_OiIVY#*xZ0aiw^>LaU8RGzClJ6k^hp&;E19% zYpJTP-ugJ|5U8D7MOGopb92eD#}1HNdu0f?Md8CgAmAf-*QBbiNn92ImdN75!;Eo` zF6->Quwn!x><`1=N6QfB*mh literal 0 HcmV?d00001 diff --git a/lx-icons/48/new-folder.png b/lx-icons/48/new-folder.png new file mode 100644 index 0000000000000000000000000000000000000000..4f9beddebfe91b708935fcc34b1e073c8cee0e8b GIT binary patch literal 9475 zcmeHNO-x)>6#nk}nHgr7!A>FA8A{RCBHC)zSYvBqphEyFRf$RCf&?Yeu1sTF_ zCQa+Yg$o<&g2WhI+1MBpn_%P528`*Z38E6I6sqN?Dlp97d)IRx17&dL&KriopmQdV zci*|^o^!r)?teJ>_`W8uJKzT3ZD|g*(R+t@Tn_rXUx}Wem-bwJYd!Gk+n&VJI(@T4 zZA}eqpm*DA^ik8<+|~-bvK2UX9EcI?*l)l~q~%%%uWzml)C`glw1n!PJfO23TQ2@Y z5=AOTpcsK-1d0*(A4h=6ux~y7Inx~_UdA9+vTS64^YEpvhG;gym8_QoIN5WzVc-RF ztO|^N5@H-vio(8975+j0;n0{wbVaMAPF1~m{&YOSJ87}k>{!(lHdCT0AL|P1`r+l! zq@6bT%19lHCU}5zuG%#cGq}g(X1iNgQFp56b(rR8|B*(+Zu{lPNdb`a(hQ|Dm@v5` z95>nlC8%r4xjWywa4nsj4IVd5bIeG@`+hvyoN-)90W3BWC^ppv9Oy;|StJ8F%laLfZZD1R`Y!ikP8h%~n!y7{>g1$=lyq7VuTmWT^ zPNzu{-6kiZ2J>yKP9X0IX;mxKK^FUvPDq-8bPeqCBGcm-AO7AFFW-0{T%K~fO>>ef z7=T1<8bgC$TF%^5Sxb}q8Urx5;3fObGP;l5G{~n>yITH5xit?U|1q#=wpmDo;4u-K zxp_#Gt}v!7pZ}KS_?*%vF94!%msj13^+9om zeS>HpkEzKaOiui4F{`%hf!AL{`?Az5SYyK)95>qLTFMK6Fvb*>qW{lRr=keebKOXk znRs&b&W8M&pGJ!SY-G8hB6*L2jNZ{eR@LN%9+eA41q0wJt-$u3o!0Cx%7vnW0nl_e zN>^Z>&jwsNh`AD(plcm7o05XnlWoffi2-Q_!tvfSE_M4l#NAb-BXt#$C|#i{20c6+ zF)qC)(6QhmShq?MIQ8t;&(m$$ oZt=eWt7NihrWk=@1pYe_IB`^K@7w*@g91@YTjiGTI^?T9lzEZ2E^HD8o6wC^%){ z?C=W_MFgiqg@KbHD0XT^oI_X~+t6BFT}8UBvuhiZrp^1ho*T#rmENT3%UU%r+}!)_ zIrp6N``vr)eJ|vN+qQHR=9T9GDD3L=_fXv|N{&X~Tb1bZRH+ZNb+-YBU(PqTyXl_o z?CEG{L*K7|hHlo}-`Ud*JY5Uy-UH~=wfh3Fi>zGS2Hfx_P`2ak{@ZUNfp*`m9e!}} z+5hE-uTf9#j?TMw0!`P7!k&EpmdB~n^H^8+X3toT%UkQ6dgs~C$O*dqZFfBAX3f%htJ!;`h(WoRls1x6 zR}#k|())%n-aq(+Ka@n*F|icD>ODuc8Ww-UvUv%SD|O0fn%oMT@Tlx{H)DN+Px-^r z0S*ZjnVlKKuFx&J(Bd2x#V;$S%`s!z-f7)_ROjez-1k+n%(hc9Rc6TMVp%6&|A{sX zo99P#>tX6EuiyK{0hi)BmncuY&ADy!pk?akf9dVA=Nl&lkT}So83@K!k$fq|#@NV% zW!|Hz%AFeH^EywoA8(5X+!aKd%3x9RgiFyLq55Q8KDSO8z|Ex|v{mJ!K$Wh#MEhd) zauPdIX@?CP1Al~ZY*Ghpf7h!D7th{{1F$Yn#Y3B}M#D7)P!(z3rxK%7N90m{Wf;M) zNAXj{bm2Lbe)F%E^O6DICXASE&odHo-kB zuu3aONzn+#BtxYDylma&p>z}^Im#}pI@F+pk>$h78m0D9-cqDimQa`lu!Q8tT>tB5 zK$^t!v1>#_m<|64dRm!JMcS{pG!&FnkQ5JfcMg(pxA7;ck02xnW zZd(XXjKI{V=ip_CMkWxNI7|I0JfhDT9ly;u0NXZje&jp+eEdBavmr`+k-8lE>|Yo@ z^$|wT3@jpiN~t)KOx22_qIhKuCMSk5^uqzn&RoLG>=b@GeF)>@gYZ?fENU-GD+d+= zmJxuJRV}Ear4%^+7A&eo#KyS*np(EQTfTwJrN5nK9Do4JmnJBGnL2IrTwq>BWtbu}0pZPf6D+WL~R1`Ogd^K_3j?@`X zVn?Es82N7lu+_p)Ysy0XepVqJ>!Ak z__2POvUD3Lt6$3s>v}Y16uDzZsLYbnGTNcId&)R-_{FHxrnB~zF$14`u>V#1VfIGx mUw~yCW;V1e16c-^Cj)^EP1C<0ZGS~X*R^?z|4{q3=l%u)qh*c& literal 0 HcmV?d00001 diff --git a/lx-icons/48/search.png b/lx-icons/48/search.png new file mode 100644 index 0000000000000000000000000000000000000000..a2cd573300c806207357632640f2469c08b43a19 GIT binary patch literal 1377 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s3dtTpz6=aiY77hwEes65fI}!`JurH5joNEdBKN&8<7{|Gk`` zz!b7DLR&)0FnPo0)7GJ{cG>u!yJ2ZOPgM2jvh8A;mzx}7eyQ{c9!cY^Um*A3t*-AO z?iY8>zMSD#e)ib*`zi5j-x9X5v#l?k)0rdUu6Q$l((XdHl&^jQD}z~cWw(5s!uex| zWLxI*+snP?ch8&=8(5a{q4D=qo>?1}Os9L+RsQsuxLLS*rNFghkV})i-CY>}GwI#~ zaySb-B8wRq^pruEv0|xx8BmbD#M9T6{Uy7+AT#%~dlvQ#3{0G!E{-7{$KPK19nF&{ z!v5i<_3bsfSIxRpxhK0_%yRX<nC|%lJ6!>w~Rn>c@OYPR_3MaB9L~oz>wC?+vot-z$ za#D_}`SQy$XvN-%`MQ~fW6EYLXXY)_-L8q{t^HZ660p1X_T=eH-!i=Ua3b}jGK2N& zn6E2u|DBqbFtKcMMoyA|8`IgVI@i(~V{-y|55BWqTV3k;CivDZUdIK>A&c1O#{TA) zXlj1w+*(zz<9Ekh0hza!&#tRA#>w?dG-b&9ztCGd?}_F`fd%u=U5*NvecLwS2Orb9 zIicrnPLkKNI`O$oxPja2N7AM10s67uVjB$w3Q9W`W*h!_@b>y=O9|tZ{#SVJKRB_% zT#qTJ_}c{uOFN$8!s09Ll{JsT>iuT7Pu_mgx;IV1QK{TJ+EUo-N8EDzBYWC@=r9%L zfB4tjE*#t^am3x|xZLiut!}IRcl{_imFDO&-}ZSoV}!tE{gd-f?c`qYO!VfLTU{&4 zC)I|EwH=zxrIo*2m*eAImDl%<>u{_rZ`rpX#c_vyP0B%a?bB!ftoh)b^3LJF^=WJX|&*XU^-#&boFyt=akR{0PSSH=l}o! literal 0 HcmV?d00001 diff --git a/lx-icons/48/settings-2.png b/lx-icons/48/settings-2.png new file mode 100644 index 0000000000000000000000000000000000000000..0b3f7bd18511f8e8f6b03ae3887ef4248470ae39 GIT binary patch literal 9475 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 W+=2`Wc?-CWkndKU*ZnQTU;YAX7Mk7w literal 0 HcmV?d00001 diff --git a/lx-icons/48/trash.png b/lx-icons/48/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..5f391f5c1e87a3f8869165f956b97c965f2b8738 GIT binary patch literal 1414 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s3dtTpz6=aiY77hwEes65fIFz0NK7dEImMbGP{Pf0YXBREnGFKlzVS%Y9+LD)X|V zKx6G2ZgMy!Yo)L9>ir<#T_PFM<~Q-DbM05G3kK34z+c$W-lT5U+}7GM>+6eR6`fvc}1_<(LGC>dASfvsYHGs!N=j;0l!Sw{*XtLrUK%gn*?INA zg%c-E+&IC~aqxfy=j>SvSEnbWnZ0Lj{KqNmcxB1SgjM;cu4E?MIwa)Gyn3o>K+>>RV^oc#%k9k85pRmJ-jsGOn0cWmzExH=F14vmb3?#Cd_ONWiB?;ovL6_ zzSF#Y;8*)DErEdnfAIdqblFrRCW^&hCFavQGp5R z-&I|fRZs_e@JLMI6_WxiKAlNq?I%DB*$z$cG3;dWnL6oo73TOX!Np--48CHZ#F2resmnu-td^C zk{VU4r)Sfl23~_&FGKn9fJ$W%Yynx`HQrf78mpAD8{k7wseCsSGPyicctjPu*m^pA z4Y$K3Q9IiQt_s|-A|wx851H^DRy<_ib8DpR61V|W_eVk@EQRa9OZL-2imOzs(z%MO z0$m{^1;)Xj(Ci}wr088R2Es*UbEXe3sDyqCszR3sdyL4($l|JieMPljgQ;|SiSk7o zTO`q3qaiKQ!?1hDxK^lYZdY+t0P`#9kd8my{$An0t>T(!dHz^yo7tv3O z?)UP#s{)))q`)_Ju&KCT8&6cRIijRh$c0NgH=4Yv3Sp~XHgiD6_yJtSRRR0v=d>Cq z2w4zSthL^zgOa!v z6;%&vf46~>9Me_rvWdy^gpP9TX}A|w!&A)RsX)|?rLShmj%hm?GPMk zO!hl%Ou}(P?p0YW1zG(H(0OPvzHmRRsJ*X3djMW2AjzJ-m(`cqD72_ zDR3j`o0XJNEl&n5NOMRD?dDSI7m(Ms+IANUKf&h#Nn8r_&S;O%+N~8H=Yh(h&PBcB z_wK^`xOV^!6K2P~c3Jv)iefTuvA-y2_Z53*sDy@%%7RVZqo>^t>lORupePVNZJkTa z5APfAwPN#sEoZa>l=5V7U8C#6Gr={aPIx-?Tb64MDDnPF;Vc&Oz7XenKbo^`9Y5^k n=>G!5IaK2Hgar~7IQuLx_14-=A5`ZqlIDTJ(t?Kk@`e8Zl6AY7 literal 0 HcmV?d00001 diff --git a/lx-icons/48/usb.png b/lx-icons/48/usb.png new file mode 100644 index 0000000000000000000000000000000000000000..a1075126b387977cf10e901b9a6dda6148911dbf GIT binary patch literal 1676 zcmb_bX;f236rLm!w&cJ$qExg91!*l-QK%vfny{20CI*5KHVs1ArBDG8P$SABdc?9L z`x=Z9K~O83p{NvFjGhWuSJZ>7MvAN=+|Dc3F26hH&6}BTzI*R{_s$&WaqZ}8I%)_Z zx;@**36Ca3SE1m)@R8~zJm~qboj3@^7$GD&hR|CKi3Sjg#Ka*XLKZm)X@})EI5H3- zxAL|-+hW4t1dL3<@FcvRf{{rWd;^Lp2&e+5EZ}Fujtm%@1YQO>X2Po}n3)A`I&jj! z?iBb|fcQ3SI0yliP$~zs0=!G0_Av;HVgD5nsnBU^O9?-i=2uQ+7<>MvoG`=^g3l5q za6JQ2wcuMuaPX1R+6f%*Vyl!N2?V>v6~rd^0JsGHRfH448901}$RwV4mx8baTyi0- z8ooVG7+!b=EsFP1unER-6wEpI2>dFEKyG;uSqllxL|t&Kz$%EUC#3BugE4@^4TMjO zV;Vk8%K)Ue!(J&t#-TCpUI0Gj5Oop6U2yOUp)puO+z{M`r-*B*`0Fb2GQlYmUk3Eq z++!vlUPd@^`FQ+48wocuFZRHJNPU&Yxt%J_F3rv)71E`di8p+*@mCg`wN~0#TeFxB zuCCkEM6=V=^8?1&;|#KRhE0*q@)lk2pq%5BPk)^;W-c07?bEGoJ=vgY@FGq9+PwGi zVH1aG8U3SQW0MEho0Tao%2BY^J%{9j9I_HCzyFymQkSyC zNS{U=$t|z#B$i3q<6vill9fJYNGzuTl zF*M98@*&CH-79K>PlpD#OG?W4)JE!W)e7zVX5-_xynFPX_5dv}F;UgrYMb|SLn(JC zSDNf~)ajv?RHu^5zgf+)jkIu~oBBz-dy1>q4{u(&gOO)xx44n&(sFfOZD7u(-Reoy zJ|*?qKta7=c_Z~u!77LKUov7_w!3OHQmJ!&#x((gtG8sDNmPRuT{$g>F8iHVrK}Y; zgj!Z6(wBFJ1(`gpU*^?Tm+i4;O?Xhv#V09>O8I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4FdyXLx4|+D^Nk;)c>PsKtcc*_@yy#-vg<-k|4ie z1_n-TG0|yn_A9Gy_!n(`?vNsL@ZCSl6}ZdZeeVbgixWYc4x4vMqq;S=S^FWs{CV9KNFm$lWdH^|`1s;*b z3=De8Ak0{?)V>TT$X?><>&pI;U5<;Hz73WRhz2q7y}~o46x4rQJVw|J{}6)>-G~8YVycw{PF)>UY)iEI*$M)p&AZ;%9j# zuTWNo{d})ZY5AH;Gc36JGBE!E6GM+_M?~~-mWGx47&l(LbEJe}+A}ei>}=`HeA~*b z7cE{q`F8oMn2y-Hd3pO+tY1Fedf)Q%-oI-8-r09a-a$q}=24uzg^ZJoWa{h7eJ?%l zSIoFs?(Z|n?yN|8&1I99#WR2YN=p-TF3$2_;$pKXp5gYMsqf@tBYLKK)MQ4AOjz(% z+gN*1!_}>i7VhIYuuH??M!|*1OWSu&{bhT*ZNZ9Ej^*VY5ALSwIVSdoRJ(AziT=^j z>|DkE#{JKBi9TcXCm*kzRCftVH*xzm$G>3tX4a|VOz}saioSKyD?Y1!=Z>1-`*%xM z)O1WbRWZ+BKyJRrk`#Je%>|q}!9dT-22WQ%mvv4FO#tjY6pa7? literal 0 HcmV?d00001 diff --git a/lx-icons/64/arrow-right.png b/lx-icons/64/arrow-right.png new file mode 100644 index 0000000000000000000000000000000000000000..e68c045852107a89ccabd12c14790bc42410586f GIT binary patch literal 17670 zcmeI430M?I7RO)B0V9`31cOLKlQqhr#<-#e6yz2UAYcStyg)#10l5Xqig<7;czlW% z3kU%OBp%$#AwgC_P~=-cQHiJo

GPbZ<364l-sL13Ii--v>>->8`5(Z@ON+SKS|b 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 A8UO$Q literal 0 HcmV?d00001 diff --git a/lx-icons/64/carrel.png b/lx-icons/64/carrel.png new file mode 100644 index 0000000000000000000000000000000000000000..af5a5aa66d35bb3d2a9b282c88b9fa6dfae55d96 GIT binary patch literal 970 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4FdyXOn^^_D^Nk;)c>Q1>LCCO*j)2<$v~>8B*-tA zfq|J{K#-eJ%+SbKg+-?S%((-JY#ygSJg(>BSo9@Q?(&al?U!rZW^D8NHAnBw23DKT z-8>u9S3WS)SaJX1qidB?joTO4a>~k!GwG+KhMFh)M?L+!FaPaYiJm7#?>%SVp7yFb z_v1x_=I;j;oogEkRQ)pLCkL4UZD&mKc6VXuV3qX%aySb-B8wRq^pruEv0|xx8BmbD z#M9T6{Uy5`7c<9o38zA!9xqQ9$B>A_Z>NL@A94_BEnY0(c*IF$qw=&4RjqGa8cuKa ze!u7a?|-x2>33(FH&+(56@II>DgNeTRQxVbq|+s6PD50X*M|yIhd}MmKRKT^atYYC zC!~g!&YLxXFJ|pp?%-F-yoXpaayChx)eZRIlr0^;_^pChLj?QwTXWwOFVybJ+HP?` z-fi{4e~eX+R(w0vV9)>JwfpOalT2*w0kUH3DsDTB?M`)1k$C*-N6U^*14~m|=NWTn ze@~h^SyMUp&xE*$D|h-7H%~b`IatUeII%cuCC ZY=`n+#O;e)8wd<&22WQ%mvv4FO#s`t))D{! literal 0 HcmV?d00001 diff --git a/lx-icons/64/computer.png b/lx-icons/64/computer.png new file mode 100644 index 0000000000000000000000000000000000000000..f15e0e6bf78b3192ad280eda98bb0fe89dfdd318 GIT binary patch literal 16671 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Ea{HEjtmSN`?>!lvI6;x#X;^) zj5kl})B`yR$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4)< zj|G>y!7R?m#Po-allwV4CztHXMf0%w6|cv*c=TA8_0jM_|!4slN)|Z{9q_<|eG`=%5Ng zTR!B0m=}m~sw*lgIs;WdAXHypp9vm|{{!Vd12M?+ShE4nLJ+FqHju^(PO~WDm8XN` zSxW4{Sq4yI=upx-8URBnwrJs2icFVdQ I&MBb@06RH*%>V!Z literal 0 HcmV?d00001 diff --git a/lx-icons/64/device.png b/lx-icons/64/device.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a099e215a62c18ae082f1b9c8abe6704d62bc9 GIT binary patch literal 1588 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4Fdz??*N|=SD=D7-~WIA|NrOz|AABg1KGb|Y#?_O z4YLpkn)W|n3Mg8E@gA1%wFgKoFA4Gs2GYP3!N|yIQ!#VS+}?00M&lJ9e_u-Gj(qr2 z$m+?TFCV`C>t^NI^m%1TptX^0NY(ml-`+cVy`JqP!XoZ7i>b$q{i?*q=(qZ8+cZsg zZ4gsDq`X(-sejs!8L!Maq;-AgCER{Y7}j&BnIfr4i(0#w2fd z7lsa2Sq~tGv%n*=n1Ml08H5=tmfDvA1=&kHeO=jKvdeKXb6l5jDr8__df@5e7!q;# z?X=h7LXHy0w#uCjVh+-|*wT6-;G&VfXjI!Qhh@{2rgf@GaYm-OExCErOZ)7)vdx=* z|C@c#vpoIw+`ED2UQRx5S@U4;pR%;_d*%0*EGaeAv{Y5KR6Nk;JKOx<{H02zr>|`( zF-^_6{E~OUQt55!X&g_pEx0sMS>l-L+HR z_iUT2!{E-W;m&JubsevUy|4AkLZ_3Gx(wGDtrXl|yt%|MXY1-G$NQrfTP^r4bK?2j z_aA>q-#Id?A#SzSg7dB{;xQk-nzOR8>F@GP4&Y7Lsba$`@rwIz?fPrG3=;R{gfa4T zw{~fVAN`cg+5K&spy&b9g&qd89K}AACT4#STg7lJY#P^{7fPr5yF2F1E@{{q5#tbW zOZL~Irq^P!37Ue7j;Swcxb4*FVD8DgLCITu4$NY@#~rQ>pQ)w zeEi;NF%&7TpX<-UaCncUAcMflXTl5&=i@(cGBiwI|AU30!>w(rUbra3hpM>8W2LxDNcd_IS$5%7?LwGlOo)zAz7FRS%w)b7nEaz0Yq}{a9eI zv^It{Ati=!f$=70G0|llE%t`bqpL-aNi1-#4vD|^Jn-oGx3m5qnzr9$iH-Zgb-$%9 z`JMm2Z29@dhnwDeJI?QF>b9?Q3-!L1@O{!R(cgd7cmvli+rG~91^?lVKjyU53jvFL O1_n=8KbLh*2~7YSJRi6K literal 0 HcmV?d00001 diff --git a/lx-icons/64/document.png b/lx-icons/64/document.png new file mode 100644 index 0000000000000000000000000000000000000000..f6cb0c8ae23306f90256afee391fe146d0818738 GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Ea{HEjtmSN`?>!lvI6;x#X;^) zj5kl})B`yR$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4LI=9d?jl|Dc~fL5NdOhAF7FbAtPYyVEb&b~jD2vMLRiKYFyifU{)P(uJ80 ztAm)H`b~eN(Ye$5{o?=sr#$4C9{>KeeG7-XUR?I8+a;aWsCerq> zR)9r(8^a$n>0qz9noG~*o%nwK^{%?NU#r5+7+fy5daV?`%>RG0rlQ{KUHeM88akY2 zZ_ea)oN#z!;{%fhUY6&KKFS*y3_1_69S~vCW)S9h!%(8Uf#pKy0Wk-0rfddTjyH_E zlq}dc#I4`0aAyPiidCyldrE9`E#O=)O>5^>-7a!qO#+ zG%|L^Oq%k^|9i*d8Ix2#Mlikb+JFChL|?;KHb!7z0YOe-&0TYuUN<-MIjNF<3=Af0 z>kmmVZefUGP;L-&;7(w)CYul+bD15iL6q`g6oLGvm5^!7jYVT+TPE)wPWqo=^7_M279{txvX9Qg7OW1|&ek?=oom^^A5*8|O8=WoT~SMm z_{RjnKPsZG;7~-+ZZHPQ9Ag_YaDQwl7DiYR8oOjk3tQTnrfYKN_q#1c;$8FZ?%gfH ze9QIj-ur&v`+h%n@7;UvuKj4o_71N*=mr39q_eFD_bs%!YVh~>eQ*AWJE^y|s}>-r3Uy@b3KpLmvX%z@(w80B>&uNbLc5;&Xt&zLB51 zH(^H2Yg;?oK%t+*r@kA;l-hlr&+i9#WCLwN|F@gp!9?dC>oDl`4TMf&Vc9fi?DMG6Y6g#v#3iWd~q-dRlJ`OZo_55NDCPAe0?| zR4N7WcpOaJ34@tT=8GjNB@UQZgeE5^l@euf$6bEMgmr|357yTv6WpDPz%P&v?>5A=~hD7%&WpYf|*P!@MBbl-{K0S<^Zy}Tcx_t zi@-{NjX@EfX%wKoj;Zy{wB?>>3*Q1T7Gw(y8RI&BNrrix^Blj#79`o&A+|jczQ)dw zwsI5h0I2h$_D@Z~>{YBkxA_(?L4=$u1hb(RAhRaIl_6IE^w^``oVzG8Nb@mRb@?EO zH?F}Pg5V|G`T!d6&@5!wmq9_DT(S^my&i@Jvwh;JJECPf^S2YE-kV zjcVraIMn4SL67z_nKONnTUFcuBypV2Q=Yr~gl2J4Hm;ecH-lRzSeWGKb>QFnB950f z_!nT8|0mcb(PxnABIM`QGYq7115m2&<~38$>;DQKRL;N(SSY1#TRt}cH00H~3z}Ca z;WHmTx;S+cilderAZ~pC&F!_M&yU~xa+I74zy9SU+yKzRhL$wKd95r%=?lKFAv-lA zZLig|mr0{l9a`8>6P|5e5hVC~EzbEk2{!<=q(!SbR?AGo8#m_#yz1fB36ev!q_qnB zCtBE`xxLxR&{B{z8LC|ev-L0HWT;~)na2TF0OZh9_ldX_xpuDTobmL^lV=$Jl)IdcEdXdGhehfp4ngqOPN_A;DUQoB#GP?#fQ+6SM2M z(Tf9PpPQ9kNL7cb1k?$1KK8@Mn6s7sFMzs+?$k}5_kS5qc8`%^q%grvq(m`{Q8UJ1>-|_|v z9Bz)r-z86XON|pDq)imbb+@~H<6Bp8oBwo1e<4=af{(y=+#F+-5VGB3MUv!8z7W?_KHmxRl#HBHVe?2FDsc0fH&poHPu?_k!5r{<;+nUhEJo{!p*tC% zo<4dj=*h`e%TEFPOcI03*N%Fao^Y|1WF=C0GCe literal 0 HcmV?d00001 diff --git a/lx-icons/64/folder-water-download.png b/lx-icons/64/folder-water-download.png new file mode 100644 index 0000000000000000000000000000000000000000..7e5a242aeb598e4cfa858a881047e236190c2f1c GIT binary patch literal 16671 zcmeHPeMnnZ6hH4JCXKB|S#8TGqcUbE$TpZ8+i*;?h!H=g(y|qC=nA${7#&?dSfLBs zptLIt29pYd?vDvWVdy@XOlE1>pw<0RMfS;LV_Rz{v~_9J<|Xg;oYtf-?fNskLLjXV(FM#~!9fI@0^XAg`{?H%dtQhBes!h&rK_E+@7O=D z)GsKZl)zJ;#9bhy!u5Ft{0iGwTE6!T9_tK*>+SQ_4Fo7Eq!RWq{htej;ATL5we-aE zc$QsVVjv)uuwM$=JVupYQ9DcDA2|c{J@i|^st`j+Zag-$@`;}WBu9<~@@(=Xli0gV z37-Gus0V-B$((Q}fS~4BBwQS=cT$;F%QOpPY*tm-R|^ZieSdnJX0_(5T7}oU5@K)z z7e`)#Bs=X^xi#03Pto0`wVM$Fv<~oir*)0iAWZA^_7W1X0r&BP&u#%%v6JSmzWu7y zeE}7|o0^4F7p8Id2}OLw$Sa5_i!TWYIE3IEw-@T$t!kYHs_D_YK6}sOH=sp{wZkPG z(kdKzvx=)YKcVXh2{238$3mKKx5Ubh$}>&@rh@OnAh5s!R>Y%w=kcfpW>fw@*NZO8 zAluf#hG$+fxNq2m9W`C-$>t6y3O!}0Z03v^%P3s>rXOw&o{GX8r4Yc1o-tMwEH^XO zxW3O=#^C$CPe)-ktO3~yo>++$)dm9M(wC(Lf`BX?*rZ{J2uPZ$EUjof2yp`Xb$@%5 zrMjJ;MCrT~F$H)r&E3w#4-9V=+`S8sq;U}qNfMQ{)kFkj?a(F(Y|Tdiw==|ivR*-chF_JrG@J70#BZBBY=##>$^d=#Q$bTWmJc! za3z3%mA~8-7vEB4aT}#rz@301r5tFE>xJ^DjJI$nfB@>(1K#sqOL9gCAP2(hK_=$C zmH=+spw?*kJu>I{{n0pVI+CWH0PX%BvAT?xbbm9**c4a>2WhP;2uLfvCg?ovYe2f^ zaH<@ODUd3IW^XSd!0aQKs{bMa^b7{`C%(|A?3o`o93-ycE;Z*Z%H)pitdS-PBe$x<7ZdzjGVr`x+4d literal 0 HcmV?d00001 diff --git a/lx-icons/64/folder-water-music.png b/lx-icons/64/folder-water-music.png new file mode 100644 index 0000000000000000000000000000000000000000..3c39c813d5a1d66acefcfde5c7fa0f5b577b263c GIT binary patch literal 16671 zcmeHPeP|R%6o0#Wx$~lzYpGT#;#Z3{t*B5dZAoKtMv{;ZlTiOCqQuntK|n0l4=S`r zTPUW2AVdrZ_K*5cQ%qtlN{b1R{$aI$RFSHG7!>+p8;Zu54{!H&`bNFW?#^9rH+Q?q zZsx&e=FPnK=Dpv%nVq{Ea{Lm6u_O^k~hGR6Dq<;@#Z<%U-09u>a)hz1SG|u(D=t;P1e^;PRLH&dTrOAW&IW z`p$kqC@Jabq3WDC0vrL307rl$Fhvm%jBziBc7}ub;iCeODnSs!#(oR@AP{ne5NP>r zU*tOrdX9=R04#3l{(AUPd_zo8K}GM!O9EQX6GfQrm%t~I*6Y8t?S%Grb-ecM(i4q_ zheqV;Q8}Jf@YE*7E*4ke-iQoCGHEVcx%~tl>lna|<2%hW0LUt2llCe7ACAT0VNBgr zc<^mJ%T6w00LUio|1Y!=%&H+--CFo%_X((Oqn`pM1u-c(^W$^lU-%|M3g$@=@{8Aq zKt3a~a^c2-3jDM)apX7vG}Jsvz|GP3xD@GbX)_T*22_=t866#Lz8$R_&<^L*GEUXy zIDz}PIXXoMayZ}_K7Eb#LRmp$vmxO1Yj=)U%TX4qu!+E=|t7N{KV(zg+G$M zrh3C=oYGR9dACwzVL?XMGXmh2v`-ajK|o5?tZQSJ08wG^Vi%CuC<@}yed`xG1-CH| zdQYOuB8dKJFyoDNjQh+>I9R@eyjH&%X2oA;gx%cGFI|FP&$h$Eu0y(*bqo!#sO>VD zrL1&wtZ9AkmoCFk+gIsgX7&KD22W8*mDLOYY2ou|2M55T6Kgswo&lzz@~GgH&j9u$ z=)g>W-`;3xl&bY#S(3LR?A;7#T6C)^aTmZOBHjgq17Hq;3E2-4u4P*1R`-pBT`MJD z0#?xSqAbq#0Gjq@$gG?hTUKRk1wa7Zm$5qE zBx!8*nU&KS$Pr^J0P~93A0-lg&tE;Z8Jd+#=;pGt6@XV})_~+=Z^lSI9~3?}_N%p7 zxm*UGu*KwPeQOr?NyJ#B3B3a^B(J~@nN0%C3y4gYoL+U%mG zbH&)4B^o)`SC!C}&Pzx39T@uaR=+kF<{*Tf6qLF6&`Wm=K-lI+qBke+;qyB_W49>X x7zy{8Bft^h2yg@_0?}8WUxq~${l5S?LZo9$sJNwPeJeFrxwf|KRHX6K{{S1#LOK8d literal 0 HcmV?d00001 diff --git a/lx-icons/64/folder-water-pictures.png b/lx-icons/64/folder-water-pictures.png new file mode 100644 index 0000000000000000000000000000000000000000..5f2fa2f46cdbc5b8bcc5407616ce1de2c9b71170 GIT binary patch literal 16671 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 literal 0 HcmV?d00001 diff --git a/lx-icons/64/folder-water.png b/lx-icons/64/folder-water.png new file mode 100644 index 0000000000000000000000000000000000000000..7f1b4cd91a238b31e38c9d4e5d394e439b9a5bf4 GIT binary patch literal 16671 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 literal 0 HcmV?d00001 diff --git a/lx-icons/64/home.png b/lx-icons/64/home.png new file mode 100644 index 0000000000000000000000000000000000000000..cc46bcf66fe09ba0af7f929eafa169ab637d2bee GIT binary patch literal 737 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N&50fKP}kkPe*se>fqakLDd-`WZ;MmIV0)GcYg- zv&Nk-=SX<_t?qk$HG6H%kLY*Ii~s$;C9mY^yC*w2)tRMj8(YKuEnlA4H7(P4w&vmb zxpU4nPWX`c@pC_qzOj*kK)>dHEuevnN#5=*3>~bp9zYIffk$L91B0G22s2hJwJ!q- zvX^-Jy0X7ym*ZmQxGv#T2-G9$>Eaj?aro`D=YC9%B5vQ;X)rBXb7?h~#@_FFGr!lX zvOB*B&gbAf^F4pEt@`)bn<7se8SZRqsC~>NQeXXi-*xkbw;zS>H*b45U;W7c6`2tq zuY3@>V7R8zsiyB3PqfWk$6DF4ie9m58&ezYvjqpVw^n29+np zWa@U#J|wwgj|(@W|B3Fyxr$F-?tL)VlXG76ZpJ1>MSott*V^n4JxtURJJchXJeFOW z$0J`?TYdhS#cPfU&$;aESlJmDGzdpbSJ!a!O6^$?)aszyC2-|1L$8|Cg+)y+(uxb- zKW3RL6Lf)f$%67S$9e+|9`~%K!i+5^Q@l3+wb|U-^z+f{*)!+IpRu3a*?H3QGyBI^ WA9c&~Qs)B0jKR~@&t;ucLK6Up0Z;A# literal 0 HcmV?d00001 diff --git a/lx-icons/64/list.png b/lx-icons/64/list.png new file mode 100644 index 0000000000000000000000000000000000000000..1e57b0dd04ba998153c91d0402a71c06da915377 GIT binary patch literal 1095 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4Fdz?&H$efSD*sJ&ZQnxpZQPz?K$B^;MD(tQ~vu; z`5iFzU%-@qzLUTBO#Bo+@4rjOE#FCBlh*!sX}jS!<(vPMU;dMSy7xa~P+{<&@-t}0 ze~Xe$K2tu2O#SaWQ+5$Ansrwp876}1mK~htGBMZXV{{p8%5JC&kNkH{r^v7rNXP8Qa0`Cd$L8eUs z+V~gf7oUkA{ipl^bN~5G{)VO=6apaA{`yV^I~&PiXeuFGuxtMUg91&~cM>o({s4{g zoBYG9akKBl&tNXd0bs@-&&jXQv_OpVodUHN5>P-vzscW$DuG4;Nnotq++tV>q$ZRE z`2_=M0)UZ)jg5`TWcBv#nM~aFUhd*Gr}&e<{rWSFso|VJ?!QIMDc}BX;1r5TO-WSd zb@1|35Q$7l)@Kw^kmt?)x0_q-@S}&1fht|T-;u67&Q~*U&RiCa33EaiW#ST5I~Fmw z@7SjQcItZ8`4`Nl&2r_~KUMD;&_Rqz-tI089jvk*Kn`btM`SSrgPt-7Ggd6MF9Qm) zmw5WRvcF`P<6`ExF5y%N)Z^pn;usQfI5|Orb#a17fT)3%=IRxzRvJ&tW!T)dY}&MK zeR|x?tLN=wtV_r^a;htlVfM$CPGR*~Gd3A-m^Cx{0sFMDYctq3++z6Zzh&#=goLf- zGdvh9tP-UTynK_C`0&-Ub4L%ndie5bulSE2NgtWE&)@IpkRZVS-r@K&4T*;h`W8pD zO?2kOH#C|m8EHw`cO0B1o%~qMZ;rrxg%by6&6qN$NqmXbv4oSonG15J%{zGNz^s|B z8s=%w6AB&mR@j_4EuNHcRzpMQ5O-ItmjSPUp02i@*7_A9k}pmGJ=CD2pcNMS_HAsi zwjSe|a6c^;hH0~WgI4j)n5lNf+{1XoF%vV>$E?1+Gj7fdUB)rRe|BiY&7Di929)LH z9yD+WTgUsP=^I~U!qZzfr}l}LlvX83D4f4_H#p|X?d1zj95{7rz9YkzWX(%%2Q`4U bF)#$FJ_zgCG3Nm=s2Mz6{an^LB{Ts5eH;1^ literal 0 HcmV?d00001 diff --git a/lx-icons/64/media-optical.png b/lx-icons/64/media-optical.png new file mode 100644 index 0000000000000000000000000000000000000000..80d3d2f38193c07c74183eb7b67a033e40d4499b GIT binary patch literal 2391 zcmV-d38?moP)y{D4^000SaNLh0L04^f{04^f|c%?sf00007 zbV*G`2k8eH6b&(*@liAY00^5&L_t(|+U;6xOdIzZ|NZaIj`3lWl_#d6snRT|`X$n&m5zl7nsl8eMPWlCV~G?^MT*w-Q`9cX2Mi(c zASjq@kU$&@%zHCZ1Ge$Y-Tn8W5HV)sGj}AmmPb0BbT7|yzu!I2^M9V_4tOCi0YFfcHn&(F{QBc=4HD2o3R)0>{X2?5Kp0PvaL?|-Ybv^4O{2pAh1+ojX# zJ{Lu?RB4PWmE|09pHlj2K|z6U(+TkTeC1lL_V1!7nxFMsU(XvDhM5*c@l}(_bZ^rL zn4FyaHp4I-k|cd2UBIs);fW}U4wK3BPuU(M_rlT9(IP^~=jjN3rLK@9=_QtBZ;XwN z?NXJ1fq?$Hx&2 z1`!Mf0RTMDgXeje&1P6E7Vtc;WGgwz%m7PiYuf|4ZFssVmzXb4WHGiC4q5R1jo(b0kX_wTE+EXHE7T3M^W;NYN! zVVEj4-u#_AcNDeBlv4Ee_QL1$DJFqo7<*q|AD5H>p69>AFbuCW=DWMQRhbb`N^$e% zO@u-rrD0&m&CNZSlmI~xzN_@1-EMb6x2KdwD5cGUAiN?7LiY0Z3V=UQN+XHFp})Uh zF`0rOd@t!TD2igK(zoyNcoKo16h-kzXU?1%SaYfeKu=?1<7EKX2q8Px-s|yrV6)j2 zEs>HWl_vE7j^nIK2=MuQab2HM8c6{DshmE2+D$3_aXe3;lq${zEX!Jx512n@;95eNkS74NtTD*?aZk=QeCV3Bl ztptO?;PAF>+cs>3=XqGIR*Z~{#3Nw`A*83Nsp(IY(oa^hz0qj=CZ+WCp5@moqWtIcMEMx#k|T1yCdk6{>>(P&&W8jXtpZWBV@O9Wo4)uN)J zLXFwPt)v9Bwzj$iK?o`_q}S`=a5z+1wg@4x+wE$s0E-tcTyP~N!0B`@%+JsNL+OL> z*s%kZm6eJ}AcUZ@vQlyE1Hh9fPh7pdy#YCe5cPOGe^aB#C@U*Nb#?W6;gC?YS}kg7 zYEV{Irb@x%^?EFn&hxO?~RchoF9SH|KK6B7so0#9puyR5bvmeA^OINput0g1i~&?{H2Txe)$sAXAJwb?Y!^C&ATQ_ZbqCcmZj_V$)| z;Mem20N}d1x-J$M7r%`RmWK}?wpCYGzY9Q+)eNm3q1D&de-w#CrZN?LBodi9ckbNp z5`j9i6Tc3W3kwimX?;c+uGVX0f=f6005H9 zp@9Pj4%pSI5>?FjQ_aoI$IqWXe*-{N?tN^Ec7(fk@A_tEXYW>3RqfYmwcFAq z=IiR}-no4FvJ*f!rG{&RHZ?^>Mdj`7?eAMGme-yq_{qu1&yE~9(l|OgIs_o)@9^vf z?Mi;X|I164F7=d_mX2F2mTx`lQvO-;?7`uh6X;^N|;avZl+ zP2jOu>?^O=``4zXrgo>(`4GSi0LB06tNp2k1F$_mKfmzo*|YYFii#iR=H~8aS$0F= zA&TO{+}vDGUtixBb#--Jb8~ak0KQzWwtwCPtk#-c|U+T01Js)+H@pf ztqnbZYydg{Tk!StmtB>F#pNvuAOc_sKwx>FIX@}CkQb79@*nP^)HZvWnx_B&002ov JPDHLkV1mKMbBzE1 literal 0 HcmV?d00001 diff --git a/lx-icons/64/new-document.png b/lx-icons/64/new-document.png new file mode 100644 index 0000000000000000000000000000000000000000..3fb032db2bdf6f689c6899b302475ce15d6e01fe GIT binary patch literal 16671 zcmeHPZ%kWN6hE(h>tCUi2na>9!GdNQV>bOVO(=v3WMOV(e(;NeEHM>~GgGq|vjK5# zelVJtCHvq9zZer^{1f9o7?o{?&BZK=n#?~0#tN4IrIfOkmezA#sVS`Gw(nim2JTr7 z@4b7^J@=g7J@?%E-s{^t2M;tBSSl<4P|)1e(27SVvB`jcKXtt_ga`SBx|TYCuimpp z+PC4gbgZ?pUi$0mLnrZKdq-1i3&0yS0Nrl^EMZaiIKXR<08F+4>^%oicJ#w<4?Teu zhUfP;Hb9L2ef0e&A7F|3Xwx&t03NO;mX3d1`#KgHUu|yLXPhwUiye0TiF03LC(ztb zclfv@Ih}odC?QB7AP^7;2m}NI0s(=5KwwKEAo1|}(AgO6es>|$es&LX)_P;urhRwh z(qq-pXDdpLLDX?aNY>g5I=>TjyovmrR$aq>`6-7la%#>O>?yLD=C$g}q`f8p(D`!g zB*U(HI)pnGSvW}0j0>A=Y2Xy zmSeE3|AzeH(6qkC=L_1>$!RUuGI|uTTG}&h4@bc`;E`R_(fCy8#62a(MP{Qc1++v! zmR+e6$DCln#Mm|I*PU`t@XrZ(4*P4dHC9jN)!69Z^pB z*)6-4B2pAV=(QK|St9c$0%)F3GqygsI?xi?iHWhB*L27m0BGdL<^a}<0+JyRu8hbp zc>}uBo~e+T%Ct~k0e}e)CVgyoXgd6eOXSF`?qncvtB~Cyy+rN+z?hd-IC1NQj=_x? z0Ph0e)BZToF%?r{{M93OUAS&|_lIA?Md@8!za}?H5FMWwz6_&77ZvL&t7@Ta$6m!# zih}F-E@Zo90cr}yz;5)eK#;79dr9in1*q4cwPRTA-PPGE$PDa!zH;hPXmbU~|u_!D@adXcgoutDEh^L?!wuvG$DH9o{lGOrS0ifyWsCGh$ zWB2M_)?VRUnHs$YL!+0KnkpRGl1hBL#+cv+Qz7?VGFJe|I$P=eYu&x=nsP;G5%2ii zaR3U7tDyA0M_K;I^>9vtIa~&lJxM;l4X+I?$RPk5>Q~0f1ppaCwMhj<1Z>iQ&DgCi z9|3�U6_-5X{~3m#`ow0MLfdYO90?A2_JkLFbH3V8UMRM=b!*@X-cd)ikn~?}B1v zA|(!T6b!12SF8q@#p9PN=h+|7VH$O1s#6UBb%-6)Cs7^96oz-2=&8#QwBZje z9cS_wj;SAiK6f_?9mWaWj^A_P2VB|-AC}Nlm9^P{u75{yygVp1QH2>d;o(sc0t<5C{ka1Ofs9fq+0D{}Fik%m965wV(c908Z9MKXZ25 SzI)n5>YDc*X!yLot@l6wDS6lc literal 0 HcmV?d00001 diff --git a/lx-icons/64/new-folder.png b/lx-icons/64/new-folder.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3fb521af8ea6fe7af80aa79cf396d8f22da8a9 GIT binary patch literal 16671 zcmeI4TTC2P7{~u-W@q*SOXX4oLXG931h0_jLxbVs)`c|GO8U^6n6zqQ^a*XPc!{kI z#*jvRFpVblp(YxW#x&N{OHBaln|<*TTWQfYT11Prrd)StcV_&~E<_%7*|V_2Ae@h! z*|T%L^PThk&Nt`GoSo3OZEH9fs0aWEcC?4O=(B|ycgrwte2V z@%h>3+OB0$Z&_5u0rd4Bj2Kq8W!XXg1STrffbCI~ai6Aq#b7=&)bjv;CR{Nh44~qb zQx^==u3c=;HI*SxQwKc^yN8|+{km8?xvr;(8jM*8it47)i7Q zxN%MxfK3>zG-kb5-`Bsh?zL0JOSQSw`ofn$$;)5-L5-CywLxBAWz6<# z%A{9QCRC=xb73=S!;aG&b;dN~`-Wc(Uly_J5m8E|6QzKdrUENfVWxAo%~;e7f~O@4 zAHh6II%RlXQI{a=Sh9^ZiUf@X~Q+9Hy>A z)qL}d7t9L-P>m^UEGmaDR*tWKE=G{TecT8kg+<^~JsnRIiFJS;Vcbixy zandBpyPN&|wSbdzmKRW&Ey@BwW@Ew{)W5$+zQfhg?-Nx@D(*sYCH?-FQwU=Aw1m;g`d#I$1c`0dOcgChXABW64TOEuH^lz^kmMux{QETH>6oQwB{qgk!3K`An61Z^k@S*Cqr~Xo=E9(|~Y7uSO5k1DN zz{pR-Ck`JKHJ{B^4A=EiO1;Y=+M@G%{8Eila%oz1-a*-dBp?Y$0+N6vAPGnUlEB&~ laHOGrKM~l%|1Us}NR%~iKYsnyw-fL1bZp)lI^MSH;J@#LjJp5; literal 0 HcmV?d00001 diff --git a/lx-icons/64/pdf.png b/lx-icons/64/pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..6b4160593287aa92a63ea439510843f80cb80bf0 GIT binary patch literal 16671 zcmeI4eQ*qC9LK-6_kQVJB$0%RydXtO5?bRAQVk-nLy4d?NZN^rs_N*Asu`xE9oo@O znW8DGqeg2`N>W7|MW;m+9Z`~s6GBMtkoROScm3^UqQ-P$@3OmhM}FqX?%qDXXP@t9 zf6ueeKKqQ76UHa%bw(WkeR5KK8g1jaq*2k|?YVE1(MFLoYTPJb&!;}tEF~Sw7N#YR zmR&qPXek{;ypohQ4p`g|ShgH!p`Vsj0&filZe;?)*8{-|HXN83OD9w>rzXb3&i&i` z^R_kgi*`ZMw1q%)UoOcOZGHZ2`ceI6^0=|;n`)!x*{IWpu3G6LNRA(szDOpEiz_Uo z99`B$po_p`OhCq0`=K#o{54AZT1LjCKn6WuKWFpx?-`sIuyJdSvwp7TSMYUI%UeIU z)i+MHwoun>xAS##I-e>$bau_0tlNh5UoCRl*#!rNuTN`3V~VZ0Syb`ub&<*N4nbJa zek|seHvm{!gP0Y0uxzOy@CRVCJy=K4kEMXXAAsm`|NjDFL-2S292PMlcm)74A$Sb{ zu^@OA05KqV9RQ&rcqITKA$TnSp&)oQ03jfFJ%G+a@HhZ1)>clF)8-f~n?-?OiD&mR{Lyb9DtwOLX&Mx?PToZ6XL#JH20CWo9 zBj7A~AHb+oh+e%8=3_@7*ZIJdx7Mu~C2s=S@Cf)0c?P8g`%qh754n$zTLDNP0sa9F z!K(T?R2LnGjQh^uMw2`On(3}{rqb(Sy<7%6%eqlMAUOcmVsQvobn}CuS15gD6UjD5 zG!(S21>kuJ$(sXvqXO2ZM(FxP($p`|SaykLRmI6BIRH5gbuA?&&_~CBt*sSDl@p~( z-W<5_H~)1O#)Kr;XsL_4O>zL7V9Ti@sC<10mS(w?dG<3DB!=ujv^$yJ-UyIxTu-%yKIL$)5rNu_K`l3W8~49#|R~4#}Q_ z>O()F!DMm^2+1QLWM&phcYhCqmBqDhzQ*11D;ThRh1;5fqyYSf$HFk+DO@Ju+=aVQ zDxCi+6#m^Y@S{(_y){a0(gC2hA4cI`vU?XambO`7ZcN~7sYXH83~0i8BWB$OXnORN zl!0V@Kwx|Vp6DBiOAB9zo?x__lJ*TWJl;Ef3KGBEgrVQ=MCIN+VAN`;0|TM-^LMP4 z04>*PA#jb?uHwe79cZ{>YA>QwTS)+Lp&gMs59cWKHRfuEAh}ixL-b%621UUT6$78h zNZhTcKxzJ7gpPO)J|Q8ve)I^6R(*t8>L+aU3azD=slb7Q5Ro$%7Z!7?qC0Pr05DFT z3Pz_x#g6TWoREg@aibyE8(=wm8dZOv$GIQ#QB`&sN*WrgC?ZZ!3QI~sRK`riug!z` z_uo)e_)A;<1N&hnAEBmH{)@$jz;yK+fx_U6VLN|7ZRHIb0iH)?(Mgz&9YsAwf|ij( z%`ng~GAL==UK#EUq1I}}9ZJd`A?TlwfFOz#-^eE&a|z|!x1pLMr6Y?wai+bvj%ZAHObn7wWQ7 z$f*r`vI!OeCHwZ^=@%xzCoCNMb7#Z$XA$%Y&usVi-w?q7l&<*<#WdmBLXWCImC`H3 zb07o*(49nkqY2grc%yi(&b$G%+U@S2#OF!5)n>2ZnUy~P3(FqnTd2G9-L_hJ*OhlS zUD?E*i_+`DGz?>;H9gLcX(gaSQCeqa*@LT1*WW8|YP!YelFmG&Iar~TxS1^8;P_NR zz&zZF%R7{=QsVZztc$=SOW?cMl1U^kmHU4I1QIzXbAP|;nwvAY;*!UXkKZ*q^ZkDT DVx{xK literal 0 HcmV?d00001 diff --git a/lx-icons/64/picture.png b/lx-icons/64/picture.png new file mode 100644 index 0000000000000000000000000000000000000000..61c337e3271449fb4354f42e4d091ba4a48a3581 GIT binary patch literal 16671 zcmeHPYiu0V75-+Qe(c)ow@Cs?NQ(qYTd07jRg2@0G@c4zi+ zcWl>oy2qNGx#ym9?>XPxd+uxG&EH(L+*>xQ41l+_W$9|VFJ@PXi+4+_HK#a&$_QKTXQMFffn6cH#Q@c)W{kje3{zY)1a5Zqhs0|0KRZ4E)1h0S#5nQzPo=F3T0XtcQ;Ta5mi02qu3*T<>NTxg_{PeTzb zHTq=&K-TO&qtJztmfU7Cz4VFZER1gaH=A`HKacsi5r0H$~yBm`)nRkTxcro z&Xzl+d~N_Pb$v1}L+6iEe_WO4Q05*5DxIMm#pKWOxz6VoGDy_8f$z)*nj2^<*E5=V zLIS#IYj^hvU|2CISV(dM5Ku}`Ut+yRzfxL|d9Aa6M`$;^++g7ql>oceT?#z#A<*7i zP_ZUq?k;dlnr%`pgmFwHk2r}r|LE0b=Tp@gFxyF{g}>NT^|5De06GS*8B?I~Cs4$qqF3)e{&YX~t(c80rP zLwjsBe)X?&*m(J$$*sI=rV-~iAHESC>P@h@X`y7GIkZ^3>$7xrSP#@v(;uQ3TkGaG zDOucHuet1GUcP%lwb?vX*g143dfuENC1VC<<#~BM#S!iL#oF(wOm_5((gbq$Ho zFtl)xwgV!xIE>SFfP=OJN?|Ma!Cp~Adjpw6%)_5c;MV!pn{CqgRF53HMBjK_};M!^(-*{8NxlX5tz8M(( z79he`Tjtlrr)ycNwq)|Et#k?a;T8Nt~j@k zNmBxVCiu}l*oJF0*JvCd8DF06LJ=Lkjc=JCY^c>8 z{+dww5$=1I+ZIWD4vEAtw|r7imS2GyrwzeLpn?Dh5Bv$Ld@Rijx$k+zBgfNtnG*4M z42%^Gh8`!m3_&8Vc5VS~021mj!oB9^%Zv-1`YqX(%QzjO&<+x@KK84z ze{%_0Zk2>WOQAEB=W}zQvoRqjgI9dX-^7g{EvA7&@~029%|xwNKc3m&#-=) zPGV^HgubP|r3RCE0S9hD-{4lM%V&@so(i*<%j3y(E|e0F9ja4Ixcme-uE8 z=xNCPZIHt>cB}b^#{!B@6P3a=r_lUqJS&N;0LTL`L6r_!DHGxTXDL`cXGxb=NvBV8 zq>y=7=G9NiWduM|{g9~dTP3~1MlFYbifpx>X!I?_Vh63NkLYCtKs>#j#(ayrHtdk2 zH2Z37T-Ih#4xMKKk;NQqWC9=>ct?u*yRDVR7S}#n*|Gcoh!Tlj3WzUr)uzYQfKku{ zK&0<4g?$l~TB5fEa8BIbe`?XWo+YV`7FqqdL`L%B!GUh0kO=_&kpBlZS3}{GcJ__B zhX9xY(sc!*_+-wSbyevLzOwBXMj_MdihlHu9;a{N$F8}TUkgF0(6tC(gRUu`lDD69 zC_&#bI-LvPaLi7!M(%n%=8yZ&9vFP$-i^|$JO571(Y5@iQrVnyQa<|*!$%iIwHZw; zLb8vQdg-zrEoU?YMdOPI6cH#QaKRxEY`XhVa%u(pzW@{D+?MzM*=)PBYXK{+b=j(= KFDzO2v;P8fUJ6|R literal 0 HcmV?d00001 diff --git a/lx-icons/64/recursive.png b/lx-icons/64/recursive.png new file mode 100644 index 0000000000000000000000000000000000000000..ac038976b752f9c433835dc970620df214d025c2 GIT binary patch literal 16671 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 literal 0 HcmV?d00001 diff --git a/lx-icons/64/settings.png b/lx-icons/64/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..4a3b304d242b335fafd3810c6b1414631ef77d43 GIT binary patch literal 1945 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%0Dp3Z)#ei{3 j=HsMoEB$`~Lgb@s{G}3$<%eHsa|L-DbH7}-`L+K6qH?p! literal 0 HcmV?d00001 diff --git a/lx-icons/64/trash.png b/lx-icons/64/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..49c1f67c28261cccc5e3aa120e01d759b671e2a2 GIT binary patch literal 1695 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!6p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4FdzyjsTw!SD*qmhj?~}1Qxp(CNsalss96jXv+Vf zssF>L{STh@pUoi-r~pU;)iB#evD(KXkX;O;i6>AC1O?Cdua&+^I;_jP?-N`Qnc+9- zmuuT&=a&18{{>9>3sejYZIhz?s)_SFx?cHB{9##fDq!-TfGPj%>u*?;pYZAXEE-V9Y8PWx zdL(e#fBS|ToX)8N-X$Jguf2Oeiu%{u)n4)L{UqXF156vH#RsixF0eZ$@_OXCwLjzc zECQw<%ZigWH5c4Ep7DDDxe3772c|dEl0!B%7lG-D*FBftv(SI?ADzr~(qWx0t&iN= zpUOt``SgF03Ga4ny5m3jx9^1Sp51S}dp~$|z4`zDf9D}5HelLaS`y?J45VRzk%fiH zeA&9S>$6!@qT-^L-%N|OWai%Z@Asd-fB*jZdrvz*F(N!XEG#UhS(T9~&6QL6^tU3v zU(21pPSk%@A%8bP_{bKD|)F*ui={##rq=XcfVHXJ6pD6q5JpF zcLfjsd~w{X$FlN{>`B2b>~p-s*^cMHb1l}@S0pAKTT$X?><>&pI;gGGc{Yo*EB zqrjXx!PCVtB;s&#f&}a0gaT%_JUO{IIe`aHA0{guW=N}JbX4RJ5ED#QT+=u;)F+0C z)5A+QcAE^-G|$r~l)O)#+?-_W;27vBDY;_BD#ylMY+WtOrkRy7my~?{B6z^z{)H0) zTs^!KRKEE7oZTRmkati^EzwgVBJy-}f-yrzOYd7QrG~k-+R}XqB?T<2BX%ZT%~D`Y zJJ?~W9k!-*L)e;vN$E!u8#Z&h9DP;#+T0;R`g-myp2XanyKncEZ^>=w zaB?>9bVj>F0|lH;8#A@ z@PT6v+Xh#mWQPzFJ!Xp=NhX~J3S!|_Oje5L`Z$;$-7J)zFu|jR(X)cb!%s1%VHu}2 zyB~AVWe({C@%GD%JZmn#Y~elOaUi*&MkkSZi_u4k1M^&OG~~$Jux)rMV5V?gYCEG$ z&Zb!`yeBpv$Yo&81_nJd*UgWT0wFFJ8j{Rv*ltV_Fj^2YzgM`QQSf04kB0W~#|#N? zLmW>qeD~VJ77{9Kv|yRodd4^FT6k8hKAz1mn_ZDvO6ue81JRugjJ`iE30`PPvu9%4 zvf+{Wf~~y`jBnrk;1zg%AitqV-C8`3dDpIw(ibjwUk5t1_OHXy>3uQ#m<%7h+WLCK zsjqB1isl+jY+#(M#w>b&Pw8(ym)m!nzi)Gn_%45^f@8@tAJqhg-zEW*pIm$#Dv%pJ z&nA|U_58brSyGqN1q>Q=>z}QO+??KcaE@j1^8*KM6z18dA9VUNk-_AkQV1Wfj#I<6 iquv}Z=d#Wzp$PzqtPUyw literal 0 HcmV?d00001 diff --git a/lx-icons/64/unhide.png b/lx-icons/64/unhide.png new file mode 100644 index 0000000000000000000000000000000000000000..aa63b5bbf6eece43988a7174cafafc487e7b2579 GIT binary patch literal 16671 zcmeI4eUOb+9LLXP+4ZuhWJ^tHyw&7&G7)00*==`6Ypjf!l8B+{MTjI#F*0H%WW3L) zVajM!44M=f`h$idO<5s%tE|myL~7YS-}T&aGkfozb6<8gJzw+j+A} z_gQ0F?_N3SwHwzq#-!)vX7%BiDbi~4_wuJl{lp>VsbGH4m{l|Dlss93p97=&1g_Q#{C+&I^pm7`bR&L02x+9NaS}%arQR z;tk7YbEekF+($sIVt|+GO6>vA4|p$W>VZadFKmHA*azy+S&|E9q?irxIzNF{2ZB;~4a|Wp1fCXk3J&h@xO+uC970)BI19szBa(_lJnJ5L8^0|-D{ z*z@o@XrG=AGih84TcwFOG!10J{6Ip*`23NLz`M? zWxzVP0bYid;3TIEz;(^RH$V&DH_)Fze&pyR>Pe+QGq@czWwdx6q%KV-Cs9{73M>Xa zcuj&C)T7L_l63~qkjzrhS)ia7x^`Z5fa;h5+R8qJk6d{V-1KK*R zWo-a8YVo-r^pNu{dC9G=;)=c zUUe}bg<`Eh$4#Iu$XW!Y5gHD`2!&MdV=$0=UE)%8d*Ex(vq%fjU|GqfAyul!RB1P8 z8o1~VZte!^Xe7y`Y-kYah6v{`a=s8W@{OUoDI8wFi7WpWfD<-yF+=q!SS?x?^n;_c zYHLA_CUr(%j5JML721*&qqSTN&|a%XlojfXf^|^|H&>KFYD4!47bzC)2$Ev7elBn^ zKqG%hEui*bJ?F|wT=_=$E1#nUCxec_8Ly1(p$<2;1sQi3thZJd1627AI1fS4{B}_h zH?IIa#zxW!F1*JoAMKv<%68zS3^)o-Yn8PD-qy372EK=;(4UptItwVT(R~Nz!*38S zUDL=-g0R=l99* z94vv)VLdE_p|FU1te@z-0q9M+T+rNK4cD5>smRje5mho^WtXdt(&*h3co*8iMo?$= zxwuXpGQJ*!R&1sGxftqD>Mwvcpn(}i9mzF-MhqS3%V9R?2~P8R92{`z0Qbi%Z{#)S z--52N51yd?tsI?H;S`8a+bYgah2tPI$^s#_WQG>Fb8sov;HY2mDXa8!SO7!dUeNBd1t#j~4G16I6_){_<_Pp2K97c6$N=pU z3UEDq2?yXbTp(C&c@afj>YTPVby{C?x`Dnc=;2E`0?T0zb?Lz>E+xbOML^(nIdp`6 zAS0BnQt07i7oYdS&u{^>@(WEvmDSv?19yT94Iv{WrMtE{ExJ4DyiAT;HU^Zf6HI}q zBNvJUBkJ>6X_^T^(8#G1Dz7P`&X<7J5uq4rfKpvY8IcCkG1v-Uz$VakE7KCDgd3p9 zFhTXILmJVhpv<@rnnNSdh+n$^%apTF1iL|NiJm+UfsBiJEum~gCB=a9TJua%#~Xki zf;88|rEECkah{Pb4ZoPI&l;slk=G%Ou&6S+HVvyxV3ie!Z$M=^T~*t;?lORHuhl@? zsg^cXbhAE~JmZ~y=R literal 0 HcmV?d00001 diff --git a/lx-icons/64/usb.png b/lx-icons/64/usb.png new file mode 100644 index 0000000000000000000000000000000000000000..5127e9765725d85f0b55e7fc78c34ae5abe860fd GIT binary patch literal 1746 zcmV;@1}*uCP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00006VoOIv00000008+zyMF)x z010qNS#tmYE+YT{E+YYWr9XB6000McNliru=?5MP0|?g`LU8~91~W-SK~#9!?VD+A zR8wD+BJ&;Oot z?m73}f&V##A4=MLHYA;zob0bjfEJV8Yu@&cP(QSLxgr(m#&utEGGA4S?M?g zH7uMd1lwm$WW)FSkein4owC*((2FdUp$Mjd*3}1p3n3LaLJX~j7%sGWKu1O*z42AY z6RElh@DP>&;RU(MA#g&eDgfzKy;4f5>EpeEOls&8lnE&I+b;w|Ec6xO$o?H6uPG?B zg@7N%pQy(YdWtw@0;+65l`Z7J$8!Qox~ijkN&}@3NT1TX>xfCeb$V3?I6whCkzozU z8ibVk3N0l92G~E7k|0(Qbmw!;LjdL}e=AB!@!bd1 zOi+4y*{hOhi0OxqvBGgMUAkoqh%<~;l@ikq)BNVWJh$OHoV#bZH$y1|3Iz~hW&+Dq zYe= z^|~gYtqq#4gPrcxNj4TE6N`@!0ZmgN z{W+A!D3&JWCju6I4K-vNYt-bp4uQrpu&)EBsJ0Kgg>)$7`zWY-pKA}8m=w&J1PG3d z#9J%FpxX?RH3MpLlq$h^6bysI{+ka%(3!C5%jebPC{=>72n0;pg+Q?$8@BOSCLN0} zr!T3v54a}aP)1^hz!Lmv2)g|;zLab&liw!XMWL>8ga`mgM8OWz;ddAq0)heBZkY@7 zFBl;Lgn+mWsdCb$!S8+&APlmW#okmobdO{XIIjX8nM+SFz>h-sR|{As9q}@LJ+DH8 zEVmCPBZ58cl3QN^JIv0m46<1C=Y%O>(Ryh;?V0T05t(Z!dBCJ0 zIt&e3d~@F#GWCiHP?-RL>Pi@sVt>%$C$9+rFb%Rni!W}U2Tk?r4yR1O|GkAf2l6r0j2e;!!qVHI;1(XTl|My~U z$3!$xpbZr$6*Fi;3 zZyyas=XAY7K)|A_EW*~>6lWH0FMLd6dzzcOGc3p# zXv`Ien+Ca{#oysD-z3U-d%{@0I&g&SlMB3wdEW>)(`~Lpy^>@Iv7v?VZwE>4J3u0p zpzr(?>4j71Z12XIUnhLMeda3xempyhVZt|ROFxK|^dCeHYzCz}(6Vs+4ZG(*mOK&u oUzeAsUk8&Td|hu8qxc`=AGqD?%LK#{X8-^I07*qoM6N<$g6HHCpa1{> literal 0 HcmV?d00001 diff --git a/lx-icons/64/video.png b/lx-icons/64/video.png new file mode 100644 index 0000000000000000000000000000000000000000..a0875907900e7c279597675ba95b0229e89e1bbd GIT binary patch literal 16671 zcmeI4Ur19?7{I@~Ki1^ z7w+TeU}dW>P!G^q4A9jLFoi^2-vExR2l(C$P<9SrdE3Q%jpb+{t);Hk3nKpOx!-ph zNvv(YrgngJYjEc}u5LMsg#2NDeGNaxJFSL|2Ykf?XcF*yJ=;4tuCj7)5NWW+2rvSS z03*N%FarN60ge=R_u2O=c%!k$z;Wdq$MGaREz3nwjG+EF7Kt_=J6QBp%2$(=5X+1r zT>d#3tqw;75Ji%fw&ffLyoEP-?KZooE|k>bRK!U6~}u|g_% zEHjV>rlO*iG^RIsqF9Ik^jh{($w?Fo5rCATRFp9QshCwcF|i7eLn{?^Sp}qGR^`OR zDnJgcRMce^kcwHA6BBVYD91>=ZqwF$C@skV197JzUR(OPfL3wCuY+*CAAKmIa-;qd zD0Mp&1&`y!@HUh`KIguS)Ty@pCaoP)iN*%z$T}kdtlaYhnfdZ&1 z%TDfud9l8HhV4%4o#{GLDK+mmeq!!c>rod&;O1|rkpkph>y$YkORIL<(Q%|M!$rd$+b;n1&%C(j?8=@=V*Gb&{} z(T+R*ien+_8K@I0Marm#WCHRfi25hgqZ;yyxxxrA0*nA7zz8TJkR3gb? 12 else original_stem + original_stem[-12:] if len( + original_stem) > 12 else original_stem ) # save in the dictionary @@ -78,13 +76,12 @@ class Tunnel: if not directory.exists() or not directory.is_dir(): logging.error( - "Temp directory does not exist or is not a directory.", - exc_info=True, - ) + "Temp directory does not exist or is not a directory.") return None # Get a list of all files in the directory - files = [file for file in AppConfig.TEMP_DIR.iterdir() if file.is_file()] + files = [file for file in AppConfig.TEMP_DIR.iterdir() + if file.is_file()] # Search for the string in the files for file in files: @@ -135,7 +132,8 @@ class Tunnel: active = None try: process: CompletedProcess[str] = run( - ["nmcli", "-t", "-f", "NAME,TYPE", "connection", "show", "--active"], + ["nmcli", "-t", "-f", "NAME,TYPE", + "connection", "show", "--active"], capture_output=True, text=True, check=False, @@ -173,7 +171,8 @@ class Tunnel: CryptoUtil.decrypt(getpass.getuser()) if len([file.name for file in AppConfig.TEMP_DIR.glob("*.conf")]) == 0: - MessageDialog("info", Msg.STR["tl_first"], title=Msg.STR["sel_tl"]) + MessageDialog( + "info", Msg.STR["tl_first"], title=Msg.STR["sel_tl"]) return False else: @@ -212,7 +211,8 @@ class Tunnel: pass except Exception as e: logging.error(f"Export failed: {str(e)}") - MessageDialog("error", Msg.STR["exp_try"], title=Msg.STR["exp_err"]) + MessageDialog( + "error", Msg.STR["exp_try"], title=Msg.STR["exp_err"]) return False finally: diff --git a/wirepy.py b/wirepy.py index bfb3bb9..49a1f25 100755 --- a/wirepy.py +++ b/wirepy.py @@ -24,9 +24,10 @@ from shared_libs.common_tools import ( ConfigManager, ThemeManager, Tooltip, + IconManager, ) -from shared_libs.wp_app_config import AppConfig, Image, Msg +from shared_libs.wp_app_config import AppConfig, Msg class Wirepy(tk.Tk): @@ -51,20 +52,22 @@ class Wirepy(tk.Tk): AppConfig.UI_CONFIG["resizable_window"][0], AppConfig.UI_CONFIG["resizable_window"][1], ) + self.minsize( AppConfig.UI_CONFIG["window_size"][0], AppConfig.UI_CONFIG["window_size"][1], ) self.title(AppConfig.UI_CONFIG["window_title"]) - self.image_manager = Image() - self.tk.call("source", f"{AppConfig.SYSTEM_PATHS['tcl_path']}/water.tcl") + self.image_manager = IconManager() + self.tk.call( + "source", f"{AppConfig.SYSTEM_PATHS['tcl_path']}/water.tcl") ConfigManager.init(AppConfig.SETTINGS_FILE) theme = ConfigManager.get("theme") ThemeManager.change_theme(self, theme) # Try to set icon try: - icon = self.image_manager.load_image("icon_vpn") + icon = self.image_manager.get_icon("vpn_small") if icon: self.iconphoto(True, icon) except: @@ -96,7 +99,7 @@ class FrameWidgets(ttk.Frame): self.dns = None self.address = None self.auto_con = None - self.image_manager = Image() + self.image_manager = IconManager() self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) self.columnconfigure(1, weight=1) @@ -134,26 +137,30 @@ class FrameWidgets(ttk.Frame): self.menu_frame = ttk.Frame(self) self.menu_frame.grid(column=0, columnspan=3, row=1, sticky="we") - self.options_btn = ttk.Menubutton(self.menu_frame, text=_("Options")) + self.options_btn = ttk.Menubutton( + self.menu_frame, text=Msg.STR["options"]) self.options_btn.grid(column=0, row=0) - Tooltip(self.options_btn, Msg.TTIP["settings"], self.tooltip_state) + Tooltip(self.options_btn, + Msg.TTIP["settings"], state_var=self.tooltip_state) self.set_update = tk.IntVar() self.settings = tk.Menu(self, relief="flat") self.options_btn.configure(menu=self.settings, style="Toolbutton") self.settings.add_checkbutton( - label=_("Disable Updates"), + label=Msg.STR["disable_updates"], command=lambda: self.update_setting(self.set_update.get()), variable=self.set_update, ) - self.updates_lb = ttk.Label(self.menu_frame, textvariable=self.update_label) + self.updates_lb = ttk.Label( + self.menu_frame, textvariable=self.update_label) self.updates_lb.grid(column=2, row=0) self.updates_lb.grid_remove() self.update_label.trace_add("write", self.update_label_display) self.update_foreground.trace_add("write", self.update_label_display) res = GiteaUpdate.api_down( - AppConfig.UPDATE_URL, AppConfig.VERSION, ConfigManager.get("updates") + AppConfig.UPDATE_URL, AppConfig.VERSION, ConfigManager.get( + "updates") ) self.update_ui_for_update(res) @@ -174,7 +181,7 @@ class FrameWidgets(ttk.Frame): ) # About BTN Menu / Label self.about_btn = ttk.Button( - self.menu_frame, text=_("About"), style="Toolbutton", command=self.about + self.menu_frame, text=Msg.STR["about"], style="Toolbutton", command=self.about ) self.about_btn.grid(column=1, row=0) @@ -186,7 +193,7 @@ class FrameWidgets(ttk.Frame): self.wg_icon_header_frame = tk.Frame(self.header_frame, bg="#2c3e50") self.header_label = tk.Label( self.header_frame, - text=_("Lx Tools Wire-Py"), + text=Msg.STR["lx_tools"], font=("Helvetica", 12, "bold"), fg="#ffffff", bg="#2c3e50", @@ -211,7 +218,7 @@ class FrameWidgets(ttk.Frame): self.wg_icon_header_label = tk.Label( self.wg_icon_header_frame, - image=self.image_manager.load_image("icon_header"), + image=self.image_manager.get_icon("vpn_small"), bg="#2c3e50", ) self.wg_icon_header_label.grid(column=0, row=0, sticky="e", ipadx=10) @@ -224,14 +231,17 @@ class FrameWidgets(ttk.Frame): pady=(15, 5), ipady=4, ) - self.version_label.grid(column=1, row=1, sticky="w", padx=(5, 20), pady=(0, 10)) - self.info_label.grid(column=2, row=0, sticky="ne", padx=(10, 10), pady=(10, 0)) + self.version_label.grid( + column=1, row=1, sticky="w", padx=(5, 20), pady=(0, 10)) + self.info_label.grid(column=2, row=0, sticky="ne", + padx=(10, 10), pady=(10, 0)) self.header_frame.columnconfigure(1, weight=1, pad=2) self.header_frame.rowconfigure(0, weight=1) # Frame for Control Buttons (Start, Stop, Import, Trash, Export) self.control_buttons_frame = ttk.Frame(self) - self.control_buttons_frame.grid(column=0, row=2, sticky="w", padx=(15, 0)) + self.control_buttons_frame.grid( + column=0, row=2, sticky="w", padx=(15, 0)) self.control_buttons_frame.columnconfigure(0, weight=1) self.control_buttons_frame.rowconfigure(2, weight=1) @@ -240,7 +250,8 @@ class FrameWidgets(ttk.Frame): self.list_container_frame.grid(column=1, row=2, sticky="nsew") self.list_container_frame.columnconfigure(1, weight=1) self.list_container_frame.rowconfigure(2, weight=1) - self.list_frame = ttk.LabelFrame(self.list_container_frame, text=_("Tunnels")) + self.list_frame = ttk.LabelFrame( + self.list_container_frame, text=Msg.STR["tunnels"]) self.list_frame.grid(column=0, row=0, sticky="nsew", padx=10, ipady=20) # Listbox with Scrollbar self.list_box = tk.Listbox(self.list_frame, selectmode="single") @@ -269,7 +280,7 @@ class FrameWidgets(ttk.Frame): # Show active Label self.select_tunnel = None self.active_frame = ttk.LabelFrame( - self.right_side_frame, text=_("Active Tunnel") + self.right_side_frame, text=Msg.STR["active_tunnel"] ) self.active_frame.grid( @@ -279,7 +290,7 @@ class FrameWidgets(ttk.Frame): self.active_frame.rowconfigure(0, weight=1) # Interface Label Frame self.interface_frame = ttk.LabelFrame( - self.right_side_frame, text=_("Interface") + self.right_side_frame, text=Msg.STR["interface"] ) self.interface_frame.grid( column=0, row=1, sticky="nsew", padx=10, pady=5, columnspan=3 @@ -288,7 +299,8 @@ class FrameWidgets(ttk.Frame): self.interface_frame.rowconfigure(1, weight=1) # Peer Label Frame - self.peer_frame = ttk.LabelFrame(self.right_side_frame, text=_("Peer")) + self.peer_frame = ttk.LabelFrame( + self.right_side_frame, text=Msg.STR["peer"]) self.peer_frame.grid( column=0, row=2, sticky="nsew", padx=10, pady=5, columnspan=3 ) @@ -320,7 +332,8 @@ class FrameWidgets(ttk.Frame): self.peer.grid(column=0, row=5, sticky="we") # Tunnel List - self.tl = Tunnel.parse_files_to_dictionary(directory=AppConfig.TEMP_DIR) + self.tl = Tunnel.parse_files_to_dictionary( + directory=AppConfig.TEMP_DIR) LxTools.clean_files(AppConfig.TEMP_DIR, file=None) AppConfig.ensure_directories() @@ -346,32 +359,35 @@ class FrameWidgets(ttk.Frame): # Button Import self.btn_i = ttk.Button( self.control_buttons_frame, - image=self.image_manager.load_image("icon_import"), + image=self.image_manager.get_icon("import_large"), command=self.import_sl, padding=0, ) self.btn_i.grid(column=0, row=1, pady=8) - Tooltip(self.btn_i, Msg.TTIP["import_tl"], self.tooltip_state) + Tooltip(self.btn_i, Msg.TTIP["import_tl"], + state_var=self.tooltip_state) # Button Trash self.btn_tr = ttk.Button( self.control_buttons_frame, - image=self.image_manager.load_image("icon_trash"), + image=self.image_manager.get_icon("trash_large"), command=self.delete, padding=0, ) self.btn_tr.grid(column=0, row=2, pady=8) if self.list_box.size() == 0: - Tooltip(self.btn_tr, Msg.TTIP["trash_tl_info"], self.tooltip_state) + Tooltip(self.btn_tr, + Msg.TTIP["trash_tl_info"], state_var=self.tooltip_state) else: - Tooltip(self.btn_tr, Msg.TTIP["trash_tl"], self.tooltip_state) + Tooltip(self.btn_tr, Msg.TTIP["trash_tl"], + state_var=self.tooltip_state) # Button Export self.btn_exp = ttk.Button( self.control_buttons_frame, - image=self.image_manager.load_image("icon_export"), + image=self.image_manager.get_icon("export_large"), command=lambda: Tunnel.export(), padding=0, ) @@ -381,39 +397,35 @@ class FrameWidgets(ttk.Frame): self.btn_exp.rowconfigure(3, weight=1) if self.list_box.size() == 0: - Tooltip(self.btn_exp, Msg.TTIP["export_tl_info"], self.tooltip_state) + Tooltip(self.btn_exp, + Msg.TTIP["export_tl_info"], state_var=self.tooltip_state) else: - Tooltip(self.btn_exp, Msg.TTIP["export_tl"], self.tooltip_state) + Tooltip(self.btn_exp, + Msg.TTIP["export_tl"], state_var=self.tooltip_state) # Label Entry self.lb_rename = ttk.Entry(self.rename_frame) self.lb_rename.grid(column=0, row=0, padx=8, pady=10, sticky="ne") self.lb_rename.config(width=15) - self.lb_rename.insert(0, _("Max. 12 characters!")) + self.lb_rename.insert(0, Msg.STR["max_chars"]) self.lb_rename.config(state="disable") if self.list_box.size() != 0: Tooltip( self.lb_rename, Msg.TTIP["rename_tl"], - self.tooltip_state, - x_offset=-120, - y_offset=-70, - ) + state_var=self.tooltip_state) else: Tooltip( self.lb_rename, Msg.TTIP["rename_tl_info"], - self.tooltip_state, - x_offset=-180, - y_offset=-50, - ) + state_var=self.tooltip_state) # Button Rename self.btn_rename = ttk.Button( self.rename_frame, - text=_("Rename"), + text=Msg.STR["rename"], state="disable", command=self.tl_rename, width=15, @@ -427,7 +439,8 @@ class FrameWidgets(ttk.Frame): # Frame for Labels, Entry and Button self.autoconnect = ttk.Label( - self.autoconnect_frame, textvariable=self.autoconnect_var + self.autoconnect_frame, + textvariable=self.autoconnect_var ) self.autoconnect.config(font=("Ubuntu", 11)) self.autoconnect.grid(column=1, row=0, pady=10, sticky="nsew") @@ -435,39 +448,31 @@ class FrameWidgets(ttk.Frame): self.autoconnect.rowconfigure(0, weight=1) self.wg_autostart = ttk.Checkbutton( self.autoconnect_frame, - text=_("Autoconnect on:"), + text=Msg.STR["autoconnect_on"], variable=self.selected_option, command=self.box_set, ) - self.wg_autostart.grid(column=0, row=0, pady=10, padx=(10, 0), sticky="ew") + self.wg_autostart.grid(column=0, row=0, pady=10, + padx=(10, 0), sticky="ew") if self.list_box.size() >= 1 and len(self.list_box.curselection()) >= 1: Tooltip( self.wg_autostart, Msg.TTIP["autostart"], - self.tooltip_state, - x_offset=-10, - y_offset=-40, - ) + state_var=self.tooltip_state) if self.list_box.size() == 0: Tooltip( self.wg_autostart, Msg.TTIP["autostart_info"], - self.tooltip_state, - x_offset=30, - y_offset=-50, - ) + state_var=self.tooltip_state) else: Tooltip( self.wg_autostart, Msg.TTIP["autostart"], - self.tooltip_state, - x_offset=-10, - y_offset=-40, - ) + state_var=self.tooltip_state) self.on_off() @@ -488,7 +493,8 @@ class FrameWidgets(ttk.Frame): tmp_dir = Path("/tmp/lxtools") Path.mkdir(tmp_dir, exist_ok=True) os.chdir(tmp_dir) - result = subprocess.run(["/usr/local/bin/lxtools_installer"], check=False) + result = subprocess.run( + ["/usr/local/bin/lxtools_installer"], check=False) if result.returncode != 0: MessageDialog("error", result.stderr) @@ -502,29 +508,32 @@ class FrameWidgets(ttk.Frame): if res == "False": self.set_update.set(value=1) - self.update_label.set(_("Update search off")) - self.update_tooltip.set(_("Updates you have disabled")) + self.update_label.set(Msg.STR["update_search_off"]) + self.update_tooltip.set(Msg.TTIP["updates_disabled"]) # Clear the foreground color as requested self.update_foreground.set("") # Set the tooltip for the label - Tooltip(self.updates_lb, self.update_tooltip.get(), self.tooltip_state) + Tooltip(self.updates_lb, self.update_tooltip.get(), + state_var=self.tooltip_state) elif res == "No Internet Connection!": - self.update_label.set(_("No Server Connection!")) + self.update_label.set(Msg.STR["no_server_connection"]) self.update_foreground.set("red") # Set the tooltip for "No Server Connection" Tooltip( self.updates_lb, - _("Could not connect to update server"), - self.tooltip_state, + Msg.TTIP["no_server_conn_tt"], + state_var=self.tooltip_state, ) elif res == "No Updates": - self.update_label.set(_("No Updates")) - self.update_tooltip.set(_("Congratulations! Wire-Py is up to date")) + self.update_label.set(Msg.STR["no_updates"]) + self.update_tooltip.set( + Msg.TTIP["up_to_date"]) self.update_foreground.set("") # Set the tooltip for the label - Tooltip(self.updates_lb, self.update_tooltip.get(), self.tooltip_state) + Tooltip(self.updates_lb, self.update_tooltip.get(), + state_var=self.tooltip_state) else: self.set_update.set(value=0) @@ -535,13 +544,15 @@ class FrameWidgets(ttk.Frame): # Create the update button self.update_btn = ttk.Button( self.menu_frame, - image=self.image_manager.load_image("update"), + image=self.image_manager.get_icon("settings"), style="Toolbutton", command=self.updater, ) self.update_btn.grid(column=5, row=0, padx=0) Tooltip( - self.update_btn, _("Click to install new version"), self.tooltip_state + self.update_btn, + Msg.TTIP["install_new_version"], + state_var=self.tooltip_state ) @staticmethod @@ -549,18 +560,11 @@ class FrameWidgets(ttk.Frame): """ a tk.Toplevel window """ - msg_t = _( - "Wire-Py a simple Wireguard Gui for Linux systems.\n\n" - "Wire-Py is open source software written in Python.\n\n" - "Email: polunga40@unity-mail.de also likes for donation.\n\n" - "Use without warranty!\n" - ) - MessageDialog( "info", - msg_t, - buttons=["OK", _("Go to Wire-Py git")], - title=_("Info"), + Msg.STR["about_msg"], + buttons=["OK", Msg.STR["goto_git"]], + title=Msg.STR["info"], commands=[ None, partial(webbrowser.open, "https://git.ilunix.de/punix/Wire-Py"), @@ -598,7 +602,8 @@ class FrameWidgets(ttk.Frame): # Now update the UI with the fresh result self.update_ui_for_update(res) except Exception as e: - logging.error(f"Error checking for updates: {e}", exc_info=True) + logging.error( + f"Error checking for updates: {e}") # Fallback to a default message if there's an error self.update_ui_for_update("No Internet Connection!") @@ -607,10 +612,10 @@ class FrameWidgets(ttk.Frame): # Set the menu text based on the current status if self.tooltip_state.get(): # If tooltips are enabled, the menu option should be to disable them - self.tooltip_label.set(_("Disable Tooltips")) + self.tooltip_label.set(Msg.STR["disable_tooltips"]) else: # If tooltips are disabled, the menu option should be to enable them - self.tooltip_label.set(_("Enable Tooltips")) + self.tooltip_label.set(Msg.STR["enable_tooltips"]) def tooltips_toggle(self): """ @@ -638,9 +643,9 @@ class FrameWidgets(ttk.Frame): """Update the theme label based on the current theme""" current_theme = ConfigManager.get("theme") if current_theme == "light": - self.theme_label.set(_("Dark")) + self.theme_label.set(Msg.STR["dark"]) else: - self.theme_label.set(_("Light")) + self.theme_label.set(Msg.STR["light"]) def on_theme_toggle(self) -> None: """Toggle between light and dark theme""" @@ -660,7 +665,7 @@ class FrameWidgets(ttk.Frame): """ self.btn_stst = ttk.Button( self.control_buttons_frame, - image=self.image_manager.load_image("icon_start"), + image=self.image_manager.get_icon("vpn_start_large"), command=lambda: self.wg_switch("start"), padding=0, ) @@ -669,9 +674,11 @@ class FrameWidgets(ttk.Frame): self.btn_stst.rowconfigure(0, weight=1) if self.list_box.size() == 0: - Tooltip(self.btn_stst, Msg.TTIP["empty_list"], self.tooltip_state) + Tooltip(self.btn_stst, + Msg.TTIP["empty_list"], state_var=self.tooltip_state) else: - Tooltip(self.btn_stst, Msg.TTIP["start_tl"], self.tooltip_state) + Tooltip(self.btn_stst, + Msg.TTIP["start_tl"], state_var=self.tooltip_state) def color_label(self) -> None: """ @@ -699,7 +706,7 @@ class FrameWidgets(ttk.Frame): """ self.btn_stst = ttk.Button( self.control_buttons_frame, - image=self.image_manager.load_image("icon_stop"), + image=self.image_manager.get_icon("vpn_stop_large"), command=lambda: self.wg_switch("stop"), padding=0, ) @@ -707,7 +714,8 @@ class FrameWidgets(ttk.Frame): self.btn_stst.columnconfigure(0, weight=1) self.btn_stst.rowconfigure(0, weight=1) - Tooltip(self.btn_stst, Msg.TTIP["stop_tl"], self.tooltip_state) + Tooltip(self.btn_stst, Msg.TTIP["stop_tl"], + state_var=self.tooltip_state) def reset_fields(self) -> None: """ @@ -727,10 +735,12 @@ class FrameWidgets(ttk.Frame): title="Select Wireguard config File", filetypes=[("WG config files", "*.conf")], ) - data_import, key_name = Tunnel.parse_files_to_dictionary(filepath=filepath) + data_import, key_name = Tunnel.parse_files_to_dictionary( + filepath=filepath) if CryptoUtil.find_key(f"{data_import[key_name]['PrivateKey']}="): - MessageDialog("error", Msg.STR["tl_exist"], title=Msg.STR["imp_err"]) + MessageDialog( + "error", Msg.STR["tl_exist"], title=Msg.STR["imp_err"]) elif not CryptoUtil.is_valid_base64( f"{data_import[key_name]['PrivateKey']}=" @@ -745,7 +755,8 @@ class FrameWidgets(ttk.Frame): # Shorten the tunnel name to the maximum allowed length if it exceeds 12 characters. original_name = filepath.name truncated_name = ( - original_name[-17:] if len(original_name) > 17 else original_name + original_name[-17:] if len( + original_name) > 17 else original_name ) import_file = shutil.copy2( filepath, AppConfig.TEMP_DIR / truncated_name @@ -764,7 +775,8 @@ class FrameWidgets(ttk.Frame): ) if process.stderr: - logging.error(f"{process.stderr}: Code {process.returncode}") + logging.error( + f"{process.stderr}: Code {process.returncode}") self.reset_fields() @@ -785,8 +797,7 @@ class FrameWidgets(ttk.Frame): if process.stderr: logging.error( - f"{process.stderr} Code: {process.returncode}", exc_info=True - ) + f"{process.stderr} Code: {process.returncode}") CryptoUtil.encrypt(getpass.getuser()) LxTools.clean_files(AppConfig.TEMP_DIR, file=None) @@ -802,13 +813,13 @@ class FrameWidgets(ttk.Frame): Tooltip( self.wg_autostart, Msg.TTIP["autostart"], - self.tooltip_state, - x_offset=-10, - y_offset=-40, - ) - Tooltip(self.btn_tr, Msg.TTIP["trash_tl"], self.tooltip_state) - Tooltip(self.btn_exp, Msg.TTIP["export_tl"], self.tooltip_state) - Tooltip(self.btn_rename, Msg.TTIP["rename_tl"], self.tooltip_state) + state_var=self.tooltip_state) + Tooltip(self.btn_tr, + Msg.TTIP["trash_tl"], state_var=self.tooltip_state) + Tooltip(self.btn_exp, + Msg.TTIP["export_tl"], state_var=self.tooltip_state) + Tooltip(self.btn_rename, + Msg.TTIP["rename_tl"], state_var=self.tooltip_state) self.lb_rename.insert(0, "Max. 12 characters!") self.str_var = tk.StringVar() @@ -825,13 +836,15 @@ class FrameWidgets(ttk.Frame): ) if process.stderr: - logging.error(process.stderr, exc_info=True) + logging.error(process.stderr) if process.returncode == 0: - print(f">> {import_file.stem} << autostart is disabled by default") + print( + f">> {import_file.stem} << autostart is disabled by default") except UnboundLocalError: - MessageDialog("error", Msg.STR["no_valid_file"], title=Msg.STR["imp_err"]) + MessageDialog( + "error", Msg.STR["no_valid_file"], title=Msg.STR["imp_err"]) except (IsADirectoryError, TypeError, FileNotFoundError): print("File import: abort by user...") except EOFError as e: @@ -854,8 +867,7 @@ class FrameWidgets(ttk.Frame): if process.stderr: logging.error( - f"{process.stderr} Code: {process.returncode}", exc_info=True - ) + f"{process.stderr} Code: {process.returncode}") self.list_box.delete(self.select_tunnel[0]) Path.unlink(f"{AppConfig.CONFIG_DIR}/{select_tl}.dat") @@ -863,7 +875,7 @@ class FrameWidgets(ttk.Frame): if select_tl == ConfigManager.get("autostart"): ConfigManager.set("autostart", "off") self.selected_option.set(0) - self.autoconnect_var.set(_("no Autoconnect")) + self.autoconnect_var.set(Msg.STR["no_autoconnect"]) self.wg_autostart.configure(state="disabled") @@ -874,15 +886,15 @@ class FrameWidgets(ttk.Frame): Tooltip( self.wg_autostart, Msg.TTIP["autostart_info"], - self.tooltip_state, - x_offset=30, - y_offset=-50, - ) + state_var=self.tooltip_state) - Tooltip(self.btn_exp, Msg.TTIP["export_tl_info"], self.tooltip_state) - Tooltip(self.btn_stst, Msg.TTIP["empty_list"], self.tooltip_state) - Tooltip(self.lb_rename, Msg.TTIP["rename_tl_info"], self.tooltip_state) - self.lb_rename.insert(0, _("Max. 12 characters!")) + Tooltip(self.btn_exp, + Msg.TTIP["export_tl_info"], state_var=self.tooltip_state) + Tooltip(self.btn_stst, + Msg.TTIP["empty_list"], state_var=self.tooltip_state) + Tooltip(self.lb_rename, + Msg.TTIP["rename_tl_info"], state_var=self.tooltip_state) + self.lb_rename.insert(0, Msg.STR["max_chars"]) if self.a != "" and self.a == select_tl: self.str_var.set(value="") @@ -894,11 +906,13 @@ class FrameWidgets(ttk.Frame): if self.list_box.size() != 0: - MessageDialog("info", Msg.STR["sel_list"], title=Msg.STR["sel_tl"]) + MessageDialog( + "info", Msg.STR["sel_list"], title=Msg.STR["sel_tl"]) else: - MessageDialog("info", Msg.STR["tl_first"], title=Msg.STR["sel_tl"]) + MessageDialog( + "info", Msg.STR["tl_first"], title=Msg.STR["sel_tl"]) def enable_check_box(self, _) -> None: """ @@ -926,7 +940,7 @@ class FrameWidgets(ttk.Frame): else: self.selected_option.set(0) - self.auto_con = _("no Autoconnect") + self.auto_con = Msg.STR["no_autoconnect"] self.autoconnect_var.set("") self.autoconnect_var = tk.StringVar() self.autoconnect_var.set(self.auto_con) @@ -982,21 +996,25 @@ class FrameWidgets(ttk.Frame): if len(self.lb_rename.get()) > 12: - MessageDialog("info", Msg.STR["sign_len"], title=Msg.STR["ren_err"]) + MessageDialog("info", Msg.STR["sign_len"], + title=Msg.STR["ren_err"]) elif len(self.lb_rename.get()) == 0: - MessageDialog("info", Msg.STR["zero_signs"], title=Msg.STR["ren_err"]) + MessageDialog( + "info", Msg.STR["zero_signs"], title=Msg.STR["ren_err"]) elif any(ch in special_characters for ch in self.lb_rename.get()): - MessageDialog("info", Msg.STR["false_signs"], title=Msg.STR["ren_err"]) + MessageDialog( + "info", Msg.STR["false_signs"], title=Msg.STR["ren_err"]) elif self.lb_rename.get() in [ file.stem for file in AppConfig.CONFIG_DIR.glob("*.dat") ]: - MessageDialog("info", Msg.STR["is_in_use"], title=Msg.STR["ren_err"]) + MessageDialog( + "info", Msg.STR["is_in_use"], title=Msg.STR["ren_err"]) else: @@ -1020,11 +1038,11 @@ class FrameWidgets(ttk.Frame): ) if process.stderr: logging.error( - f"{process.stderr} Code: {process.returncode}", exc_info=True - ) + f"{process.stderr} Code: {process.returncode}") source = Path(f"{AppConfig.CONFIG_DIR}/{select_tl}.dat") - destination = AppConfig.CONFIG_DIR / f"{self.lb_rename.get()}.dat" + destination = AppConfig.CONFIG_DIR / \ + f"{self.lb_rename.get()}.dat" source.replace(destination) self.tl[self.lb_rename.get()] = self.tl.pop(select_tl) if select_tl == ConfigManager.get("autostart"): @@ -1038,10 +1056,11 @@ class FrameWidgets(ttk.Frame): except IndexError: - MessageDialog("info", Msg.STR["sel_list"], title=Msg.STR["ren_err"]) + MessageDialog( + "info", Msg.STR["sel_list"], title=Msg.STR["ren_err"]) except EOFError as e: - logging.error(e, exc_info=True) + logging.error(e) def handle_tunnel_data(self, active=None, data=None) -> None: """Processes tunnel data from an active connection and updates @@ -1113,11 +1132,13 @@ class FrameWidgets(ttk.Frame): if self.list_box.size() != 0: - MessageDialog("info", Msg.STR["sel_list"], title=Msg.STR["sel_tl"]) + MessageDialog( + "info", Msg.STR["sel_list"], title=Msg.STR["sel_tl"]) else: - MessageDialog("info", Msg.STR["tl_first"], title=Msg.STR["sel_tl"]) + MessageDialog( + "info", Msg.STR["tl_first"], title=Msg.STR["sel_tl"]) def handle_connection_state(self, action: str, tunnel_name: str = None) -> None: """ @@ -1138,8 +1159,7 @@ class FrameWidgets(ttk.Frame): if process.stderr: logging.error( - f"{process.stderr} Code: {process.returncode}", exc_info=True - ) + f"{process.stderr} Code: {process.returncode}") self.update_connection_display() self.reset_fields() @@ -1157,8 +1177,7 @@ class FrameWidgets(ttk.Frame): if process.stderr: logging.error( - f"{process.stderr} Code: {process.returncode}", exc_info=True - ) + f"{process.stderr} Code: {process.returncode}") self.update_connection_display() self.handle_tunnel_data(self.a, self.tl) @@ -1187,7 +1206,6 @@ class FrameWidgets(ttk.Frame): if __name__ == "__main__": AppConfig.ensure_directories() AppConfig.create_default_settings() - _ = AppConfig.setup_translations() LxTools.sigi(AppConfig.TEMP_DIR) CryptoUtil.decrypt(getpass.getuser()) window = Wirepy() diff --git a/wp_app_config.py b/wp_app_config.py index 83e76fc..2dc4a48 100755 --- a/wp_app_config.py +++ b/wp_app_config.py @@ -1,13 +1,10 @@ #!/usr/bin/python3 """App configuration for Wire-Py""" import logging -import gettext -import locale -import tkinter as tk -import os from pathlib import Path from subprocess import CompletedProcess, run from typing import Dict, Any +from shared_libs.common_tools import Translate class AppConfig: @@ -35,10 +32,6 @@ class AppConfig: Path(LOG_DIR).mkdir(parents=True, exist_ok=True) LOG_FILE_PATH = LOG_DIR / "wirepy.log" - # Localization - APP_NAME: str = "wirepy" - LOCALE_DIR: Path = Path("/usr/share/locale/") - # Base paths BASE_DIR: Path = Path.home() CONFIG_DIR: Path = BASE_DIR / ".config/wire_py" @@ -65,7 +58,7 @@ class AppConfig: # UI configuration UI_CONFIG: Dict[str, Any] = { - "window_title": "", + "window_title": "WirePy", "window_title2": "LogViewer", "window_size": (590, 460), "font_family": "Ubuntu", @@ -81,20 +74,6 @@ class AppConfig: "pkey_path": "/usr/local/etc/ssl/pwgk.pem", } - @staticmethod - def setup_translations() -> gettext.gettext: - """ - Initialize translations and set the translation function - Special method for translating strings in this file - - Returns: - The gettext translation function - """ - locale.bindtextdomain(AppConfig.APP_NAME, AppConfig.LOCALE_DIR) - gettext.bindtextdomain(AppConfig.APP_NAME, AppConfig.LOCALE_DIR) - gettext.textdomain(AppConfig.APP_NAME) - return gettext.gettext - @classmethod def ensure_directories(cls) -> None: """Ensures that all required directories exist""" @@ -142,10 +121,11 @@ class AppConfig: check=False, ) if process.returncode == 0: - logging.info(process.stdout, exc_info=True) + logging.info(process.stdout) if process.stderr: - logging.error(f"{process.stderr} Code: {process.returncode}", exc_info=True) + logging.error( + f"{process.stderr}") @classmethod def ensure_log(cls) -> None: @@ -155,66 +135,7 @@ class AppConfig: # here is initializing the class for translation strings -_ = AppConfig.setup_translations() - - -class Image: - def __init__(self): - self.images = {} - - def load_image(self, image_key, fallback_paths=None) -> None | tk.PhotoImage: - """Load PNG image using tk.PhotoImage with fallback options""" - if image_key in self.images: - return self.images[image_key] - - # Define image paths based on key - image_paths = { - "icon_header": [ - "/usr/share/icons/lx-icons/32/wg_vpn.png", - ], - "icon_vpn": [ - "/usr/share/icons/lx-icons/48/wg_vpn.png", - ], - "icon_start": [ - "/usr/share/icons/lx-icons/48/wg_vpn-start.png", - ], - "icon_stop": [ - "/usr/share/icons/lx-icons/48/wg_vpn-stop.png", - ], - "icon_import": [ - "/usr/share/icons/lx-icons/48/wg_import.png", - ], - "icon_export": [ - "/usr/share/icons/lx-icons/48/wg_export.png", - ], - "icon_trash": [ - "/usr/share/icons/lx-icons/48/wg_trash.png", - ], - "update": [ - "/usr/share/icons/lx-icons/16/settings.png", - ], - } - - # Get paths to try - paths_to_try = image_paths.get(image_key, []) - - # Add fallback paths if provided - if fallback_paths: - paths_to_try.extend(fallback_paths) - - # Try to load image from paths - for path in paths_to_try: - try: - if os.path.exists(path): - photo = tk.PhotoImage(file=path) - self.images[image_key] = photo - return photo - except tk.TclError as e: - print(f"Fail to load image {path}: {e}") - continue - - # Return None if no image found - return None +_ = Translate.setup_translations("wirepy") class Msg: @@ -269,6 +190,33 @@ class Msg: "invalid_base64": _( "Invalid base64 format!\nPlease use a Config file with valid key." ), + "options": _("Options"), + "disable_updates": _("Disable Updates"), + "about": _("About"), + "lx_tools": _("Lx Tools Wire-Py"), + "tunnels": _("Tunnels"), + "active_tunnel": _("Active Tunnel"), + "interface": _("Interface"), + "peer": _("Peer"), + "rename": _("Rename"), + "max_chars": _("Max. 12 characters!"), + "autoconnect_on": _("Autoconnect on:"), + "no_autoconnect": _("no Autoconnect"), + "update_search_off": _("Update search off"), + "no_server_connection": _("No Server Connection!"), + "no_updates": _("No Updates"), + "about_msg": _( + "Wire-Py a simple Wireguard Gui for Linux systems.\n\n" + "Wire-Py is open source software written in Python.\n\n" + "Email: polunga40@unity-mail.de also likes for donation.\n\n" + "Use without warranty!\n" + ), + "goto_git": _("Go to Wire-Py git"), + "info": _("Info"), + "disable_tooltips": _("Disable Tooltips"), + "enable_tooltips": _("Enable Tooltips"), + "dark": _("Dark"), + "light": _("Light"), } TTIP: Dict[str, str] = { # Strings for Tooltips @@ -295,4 +243,8 @@ class Msg: "To use the autostart, a tunnel must be selected from the list" ), "download": _("Click to download new version"), - } + "updates_disabled": _("Updates you have disabled"), + "no_server_conn_tt": _("Could not connect to update server"), + "up_to_date": _("Congratulations! Wire-Py is up to date"), + "install_new_version": _("Click to install new version"), + } \ No newline at end of file