diff --git a/.gitignore b/.gitignore
index f54ae76..1a73581 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
*.glade~
-*.glade#
\ No newline at end of file
+*.glade#
+extracted/
+*.txt
\ No newline at end of file
diff --git a/cinnamon-dynamic-wallpaper@TobiZog/image-configurator/image-configurator.glade b/cinnamon-dynamic-wallpaper@TobiZog/image-configurator/image-configurator.glade
index fa26e63..4b04cc8 100644
--- a/cinnamon-dynamic-wallpaper@TobiZog/image-configurator/image-configurator.glade
+++ b/cinnamon-dynamic-wallpaper@TobiZog/image-configurator/image-configurator.glade
@@ -13,10 +13,15 @@
+
+
+
+
+
+
False
center
- 1000
768
../icons/icon.png
@@ -24,7 +29,10 @@
True
True
+ never
in
+ False
+ True
True
@@ -51,7 +59,8 @@
True
False
- 12
+ 8
+ 8
@@ -84,7 +93,7 @@
False
True
True
-
+
1
@@ -100,7 +109,6 @@
True
True
rb_included_image_set
-
1
@@ -137,7 +145,8 @@
True
False
- 12
+ 8
+ 8
@@ -168,6 +177,7 @@
True
filefilter1
+
1
@@ -266,8 +276,11 @@
True
False
vertical
+ 8
+ 300
+ 200
True
False
True
@@ -281,9 +294,18 @@
-
+
True
False
+ ls_preview
+ True
+ 0
+
+
+
+ False
+
+
False
@@ -329,8 +351,11 @@
True
False
vertical
+ 8
+ 300
+ 200
True
False
True
@@ -343,9 +368,18 @@
-
+
True
False
+ ls_preview
+ True
+ 0
+
+
+
+ False
+
+
False
@@ -391,8 +425,11 @@
True
False
vertical
+ 8
+ 300
+ 200
True
False
True
@@ -405,9 +442,18 @@
-
+
True
False
+ ls_preview
+ True
+ 0
+
+
+
+ False
+
+
False
@@ -453,8 +499,11 @@
True
False
vertical
+ 8
+ 300
+ 200
True
False
True
@@ -467,9 +516,18 @@
-
+
True
False
+ ls_preview
+ True
+ 0
+
+
+
+ False
+
+
False
@@ -515,8 +573,11 @@
True
False
vertical
+ 8
+ 300
+ 200
True
False
True
@@ -529,9 +590,18 @@
-
+
True
False
+ ls_preview
+ True
+ 0
+
+
+
+ False
+
+
False
@@ -577,8 +647,11 @@
True
False
vertical
+ 8
+ 300
+ 200
True
False
True
@@ -591,9 +664,18 @@
-
+
True
False
+ ls_preview
+ True
+ 0
+
+
+
+ False
+
+
False
@@ -639,8 +721,11 @@
True
False
vertical
+ 8
+ 300
+ 200
True
False
True
@@ -653,9 +738,18 @@
-
+
True
False
+ ls_preview
+ True
+ 0
+
+
+
+ False
+
+
False
@@ -701,8 +795,11 @@
True
False
vertical
+ 8
+ 300
+ 200
True
False
True
@@ -715,9 +812,18 @@
-
+
True
False
+ ls_preview
+ True
+ 0
+
+
+
+ False
+
+
False
@@ -763,8 +869,11 @@
True
False
vertical
+ 8
+ 300
+ 200
True
False
True
@@ -777,9 +886,18 @@
-
+
True
False
+ ls_preview
+ True
+ 0
+
+
+
+ False
+
+
False
diff --git a/cinnamon-dynamic-wallpaper@TobiZog/image-configurator/image-configurator.py b/cinnamon-dynamic-wallpaper@TobiZog/image-configurator/image-configurator.py
index 39cafa3..4bb191a 100644
--- a/cinnamon-dynamic-wallpaper@TobiZog/image-configurator/image-configurator.py
+++ b/cinnamon-dynamic-wallpaper@TobiZog/image-configurator/image-configurator.py
@@ -1,23 +1,38 @@
-import gi, os
+import gi, os, glob
gi.require_version("Gtk", "3.0")
-from gi.repository import Gtk
+from gi.repository import Gtk, GdkPixbuf
+
+DIR = os.path.dirname(os.path.abspath(__file__))
+UI_FILE = DIR + "/image-configurator.glade"
+EXPORT_DIR = "extracted"
-UI_FILE = os.path.dirname(os.path.abspath(__file__)) + "/image-configurator.glade"
class ImageConfigurator:
def __init__(self) -> None:
+ ########### Class variables ###########
+
+
+
+ try:
+ os.mkdir(DIR + "/" + EXPORT_DIR)
+ except:
+ pass
+
+
+ ########### GTK stuff ###########
self.builder = Gtk.Builder()
self.builder.add_from_file(UI_FILE)
self.builder.connect_signals(self)
- # Get all resources from the glade file
+ ########### Glade Ressources ###########
self.imageSetText = self.builder.get_object("lb_image_set")
self.imageSetCb = self.builder.get_object("cb_image_set")
self.fileChooserText = self.builder.get_object("lb_heic_file")
self.fileChooserFc = self.builder.get_object("fc_heic_file")
self.image_set_list_store = self.builder.get_object("image_set_list_store")
+ self.ls_preview = self.builder.get_object("ls_preview")
self.img_previews = [
self.builder.get_object("img_preview_1"),
@@ -31,10 +46,39 @@ class ImageConfigurator:
self.builder.get_object("img_preview_9")
]
- # Predefinition
+ self.cb_previews = [
+ self.builder.get_object("cb_preview_1"),
+ self.builder.get_object("cb_preview_2"),
+ self.builder.get_object("cb_preview_3"),
+ self.builder.get_object("cb_preview_4"),
+ self.builder.get_object("cb_preview_5"),
+ self.builder.get_object("cb_preview_6"),
+ self.builder.get_object("cb_preview_7"),
+ self.builder.get_object("cb_preview_8"),
+ self.builder.get_object("cb_preview_9")
+ ]
+
+
+ ########### Load predefinitions and settings ###########
self.image_set_list_store.append(["Big Sur Beach 2"])
self.image_set_list_store.append(["Firewatch"])
self.image_set_list_store.append(["Lakeside"])
+ # todo
+
+
+ try:
+ # Create the combobox content
+ self.createExtracted()
+ self.changePreviewSpinners(self.extracted)
+
+ # Load the images
+ with open(DIR + "/selected_images.txt", "r") as file:
+ for i, line in enumerate(file.readlines()):
+ line = line.removesuffix("\n")
+ self.changePreviewImage(i, EXPORT_DIR + "/" + line)
+ self.cb_previews[i].set_active(self.extracted.index(line))
+ except:
+ pass
def showMainWindow(self):
@@ -44,29 +88,82 @@ class ImageConfigurator:
Gtk.main()
- def changeImage(self, imageId: int, imageURI: str):
- self.img_previews[imageId].set_from_file(os.path.dirname(os.path.abspath(__file__)) + "/" + imageURI)
+ def changePreviewImage(self, imageId: int, imageURI: str):
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file(DIR + "/" + imageURI)
+ pixbuf = pixbuf.scale_simple(300, 200, GdkPixbuf.InterpType.BILINEAR)
+
+ self.img_previews[imageId].set_from_pixbuf(pixbuf)
- def onRadioIncludedImageSet(self, rb):
- if rb.get_active():
- self.imageSetText.set_visible(True)
- self.imageSetCb.set_visible(True)
+ def extractHeifImages(self, imageURI: str):
+ imageURI = imageURI.replace("%20", "\ ")
+
+ filename = imageURI[imageURI.rfind("/"):imageURI.rfind(".")]
- self.fileChooserText.set_visible(False)
- self.fileChooserFc.set_visible(False)
+ self.wipeImages()
+ os.system("heif-convert " + imageURI + " " + DIR + "/" + EXPORT_DIR + filename + ".jpg")
- def onRadioExternalImageSet(self, rb):
- if rb.get_active():
- self.fileChooserText.set_visible(True)
- self.fileChooserFc.set_visible(True)
-
- self.imageSetText.set_visible(False)
- self.imageSetCb.set_visible(False)
+ def wipeImages(self):
+ for file in glob.glob(DIR + "/" + EXPORT_DIR + "/*"):
+ os.remove(file)
+
+
+ def changePreviewSpinners(self, options: list):
+ for option in options:
+ self.ls_preview.append([option])
+
+
+ def createExtracted(self):
+ self.extracted = os.listdir(DIR + "/" + EXPORT_DIR)
+ self.extracted.sort()
+
+
+ ########## UI Signals ##########
+
+ def onHeifSelected(self, fc):
+ # Get the URI to the file
+ uri = fc.get_file().get_uri()
+ uri = uri[7:]
+
+ self.extractHeifImages(uri)
+ self.createExtracted()
+ self.changePreviewSpinners(self.extracted)
+
+
+ def onRadioImageSet(self, rb):
+ """ UI Signal, if the radio buttons are toggled
+
+ Args:
+ rb (GtkRadioButton): The toggled RadioButton
+ """
+ self.imageSetText.set_visible(rb.get_active())
+ self.imageSetCb.set_visible(rb.get_active())
+
+ self.fileChooserText.set_visible(not rb.get_active())
+ self.fileChooserFc.set_visible(not rb.get_active())
+
+
+ def onPreviewComboboxSelected(self, cb):
+ number = Gtk.Buildable.get_name(cb)
+ number = number[number.rfind("_") + 1:]
+
+ self.changePreviewImage(int(number) - 1, EXPORT_DIR + "/" + self.extracted[cb.get_active()])
def onApply(self, *args):
+ buffer = []
+
+ for cb in self.cb_previews:
+ if cb.get_active() != -1:
+ buffer.append(self.extracted[cb.get_active()])
+ else:
+ buffer.append(buffer[len(buffer) - 1])
+
+ with open(DIR + "/selected_images.txt", "w") as file:
+ for buff in buffer:
+ file.write(buff + "\n")
+
# todo
Gtk.main_quit()