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()