From d88a21c6f068748a5ec6aa814446e906ba33b226 Mon Sep 17 00:00:00 2001 From: tobias Date: Sat, 16 Dec 2023 05:00:11 +0100 Subject: [PATCH] New source selection buttons --- .../5.4/preferences/preferences.glade | 373 +++++++++++++----- .../5.4/preferences/preferences.py | 54 ++- .../5.4/preferences/time_bar.py | 151 +++++-- 3 files changed, 435 insertions(+), 143 deletions(-) diff --git a/cinnamon-dynamic-wallpaper@TobiZog/5.4/preferences/preferences.glade b/cinnamon-dynamic-wallpaper@TobiZog/5.4/preferences/preferences.glade index 8d314ec..c3c1dae 100644 --- a/cinnamon-dynamic-wallpaper@TobiZog/5.4/preferences/preferences.glade +++ b/cinnamon-dynamic-wallpaper@TobiZog/5.4/preferences/preferences.glade @@ -18,7 +18,7 @@ False center 1024 - 768 + 600 center @@ -145,17 +145,22 @@ True False center - 8 - start + True + expand - + True True True + True False + 8 + 8 + 8 + 8 vertical @@ -192,14 +197,19 @@ - + True True True + True False + 8 + 8 + 8 + 8 vertical @@ -236,14 +246,19 @@ - + True True True + True False + 8 + 8 + 8 + 8 vertical @@ -284,7 +299,8 @@ - + + 64 True True @@ -327,6 +343,7 @@ + 64 True @@ -370,6 +387,7 @@ + 64 True @@ -450,76 +468,11 @@ False 8 8 - - - 200 - True - False - image-x-generic - 6 - - - 0 - 1 - - - - - 200 - True - False - image-x-generic - 6 - - - 1 - 1 - - - - - 200 - True - False - image-x-generic - 6 - - - 2 - 1 - - - - - 200 - True - False - image-x-generic - 6 - - - 3 - 1 - - - - - 200 - True - False - image-x-generic - 6 - - - 4 - 1 - - True False - label + 00:00 - 07:35 0 @@ -530,7 +483,7 @@ True False - label + 08:15 - 08:43 1 @@ -541,7 +494,7 @@ True False - label + 11:13 - 13:12 2 @@ -552,7 +505,7 @@ True False - label + 14:42 - 15:41 3 @@ -563,7 +516,7 @@ True False - label + 16:13 - 16:52 4 @@ -571,19 +524,119 @@ - + + 200 + True + False + ../../../../../Desktop/cdw-concept/image-set/9.jpg + 6 + + + 0 + 2 + - + + 200 + True + False + ../../../../../Desktop/cdw-concept/image-set/2.jpg + 6 + + + 1 + 2 + - + + 200 + True + False + ../../../../../Desktop/cdw-concept/image-set/4.jpg + 6 + + + 2 + 2 + - + + 200 + True + False + ../../../../../Desktop/cdw-concept/image-set/6.jpg + 6 + + + 3 + 2 + - + + 200 + True + False + ../../../../../Desktop/cdw-concept/image-set/8.jpg + 6 + + + 4 + 2 + + + + + True + False + + + 0 + 1 + + + + + True + False + + + 1 + 1 + + + + + True + False + + + 2 + 1 + + + + + True + False + + + 3 + 1 + + + + + True + False + + + 4 + 1 + @@ -605,23 +658,23 @@ - + + True False - center - 8 + 8 + 8 200 True False - image-x-generic + ../../../../../Desktop/cdw-concept/image-set/1.jpg 6 - False - True - 0 + 0 + 0 @@ -629,13 +682,12 @@ 200 True False - image-x-generic + ../../../../../Desktop/cdw-concept/image-set/9.jpg 6 - False - True - 1 + 4 + 0 @@ -643,13 +695,12 @@ 200 True False - image-x-generic + ../../../../../Desktop/cdw-concept/image-set/7.jpg 6 - False - True - 2 + 3 + 0 @@ -657,13 +708,130 @@ 200 True False - image-x-generic + ../../../../../Desktop/cdw-concept/image-set/5.jpg 6 - False - True - 3 + 2 + 0 + + + + + 200 + True + False + ../../../../../Desktop/cdw-concept/image-set/3.jpg + 6 + + + 1 + 0 + + + + + True + False + 07:35 - 08:14 + + + 0 + 1 + + + + + True + False + 08:44 - 11:12 + + + 1 + 1 + + + + + True + False + 13:13 - 14:41 + + + 2 + 1 + + + + + True + False + 15:41 - 16:12 + + + 3 + 1 + + + + + True + False + 16:53 - 23:59 + + + 4 + 1 + + + + + True + False + + + 0 + 2 + + + + + True + False + + + 1 + 2 + + + + + True + False + + + 3 + 2 + + + + + True + False + + + 2 + 2 + + + + + True + False + + + 4 + 2 @@ -673,9 +841,6 @@ 2 - - - False diff --git a/cinnamon-dynamic-wallpaper@TobiZog/5.4/preferences/preferences.py b/cinnamon-dynamic-wallpaper@TobiZog/5.4/preferences/preferences.py index 329dc17..e21047e 100644 --- a/cinnamon-dynamic-wallpaper@TobiZog/5.4/preferences/preferences.py +++ b/cinnamon-dynamic-wallpaper@TobiZog/5.4/preferences/preferences.py @@ -2,7 +2,7 @@ # Imports import gi, os -from time_bar import create_bar +from time_bar import create_bar_chart gi.require_version("Gtk", "3.0") from gi.repository import Gtk, GdkPixbuf @@ -15,16 +15,30 @@ GLADE_URI = os.path.dirname(os.path.abspath(__file__)) + "/preferences.glade" class Preferences: """ Preference window class """ + + #################### Lifecycle #################### + def __init__(self) -> None: self.builder = Gtk.Builder() self.builder.add_from_file(GLADE_URI) self.builder.connect_signals(self) + + # UI objects + self.buttonImageSet = self.builder.get_object("tb_image") + self.buttonHeicFile = self.builder.get_object("tb_heic") + self.buttonSourceFolder = self.builder.get_object("tb_folder") + self.listBoxRowImageSet = self.builder.get_object("lbr_image") + self.listBoxRowHeicFile = self.builder.get_object("lbr_heic") + self.listBoxRowSourceFolder = self.builder.get_object("lbr_folder") + self.imgBar = self.builder.get_object("img_bar") + + # Time bar # todo: Sample times - create_bar(1036, 200, [0, 455, 494, 523, 673, 792, 882, 941, 973, 1013, 1440]) + create_bar_chart(1036, 150, [0, 455, 494, 523, 673, 792, 882, 941, 973, 1013]) pixbuf = GdkPixbuf.Pixbuf.new_from_file("time_bar.svg") - self.builder.get_object("img_bar").set_from_pixbuf(pixbuf) + self.imgBar.set_from_pixbuf(pixbuf) def show(self): @@ -33,8 +47,7 @@ class Preferences: window = self.builder.get_object("window_main") window.show_all() - self.builder.get_object("lbr_heic").set_visible(False) - self.builder.get_object("lbr_folder").set_visible(False) + self.buttonImageSet.set_active(True) Gtk.main() @@ -45,5 +58,36 @@ class Preferences: Gtk.main_quit() + #################### Callbacks #################### + + def onToggleButtonImageClicked(self, button): + if button.get_active(): + self.buttonHeicFile.set_active(False) + self.buttonSourceFolder.set_active(False) + + self.listBoxRowImageSet.set_visible(True) + self.listBoxRowHeicFile.set_visible(False) + self.listBoxRowSourceFolder.set_visible(False) + + def onToggleButtonHeicClicked(self, button): + if button.get_active(): + self.buttonImageSet.set_active(False) + self.buttonSourceFolder.set_active(False) + + self.listBoxRowImageSet.set_visible(False) + self.listBoxRowHeicFile.set_visible(True) + self.listBoxRowSourceFolder.set_visible(False) + + def onToggleButtonFolderClicked(self, button): + if button.get_active(): + self.buttonImageSet.set_active(False) + self.buttonHeicFile.set_active(False) + + self.listBoxRowImageSet.set_visible(False) + self.listBoxRowHeicFile.set_visible(False) + self.listBoxRowSourceFolder.set_visible(True) + + + if __name__ == "__main__": Preferences().show() \ No newline at end of file diff --git a/cinnamon-dynamic-wallpaper@TobiZog/5.4/preferences/time_bar.py b/cinnamon-dynamic-wallpaper@TobiZog/5.4/preferences/time_bar.py index 34ed484..d6b0abe 100644 --- a/cinnamon-dynamic-wallpaper@TobiZog/5.4/preferences/time_bar.py +++ b/cinnamon-dynamic-wallpaper@TobiZog/5.4/preferences/time_bar.py @@ -1,45 +1,128 @@ import math -def create_bar(image_width, image_height, times): - image_code = [''] - colors = ["00193dff", "05597fff", "54babfff", "bfe3c2ff", "ffbf6bff", "fdb55cff", "f37f73ff", "7f3d85ff", "4a217aff", "00193dff"] +image_code = [] - for i in range(0, 10): - start_point = (((100 / 1440) * times[i] / 100) * image_width) - width = math.ceil((((100 / 1440) * (times[i + 1] - times[i]) / 100) * image_width)) - image_code.append('' % (colors[i], start_point, width)) +colors = [ + "00193dff", + "05597fff", + "54babfff", + "bfe3c2ff", + "ffbf6bff", + "fdb55cff", + "f37f73ff", + "7f3d85ff", + "4a217aff", + "00193dff" + ] - bar_part_mid = start_point + width / 2 +bar_pos_x = [] - if (i < 5): - polyline_x = i * 10 + 10 - polyline_y = 0 - image_x = 100 + i * (200 + 8) - elif (i < 9): - polyline_x = (i - 4) * 10 + 160 - polyline_y = 210 - image_x = 200 + (i - 5) * (200 + 8) - - if i < 9: - image_code.append( - '' % - (image_x, polyline_y, image_x, polyline_x, bar_part_mid, polyline_x, bar_part_mid, colors[i]) - ) - - for i in range(0, 8): - image_code.append( - '' % - (i * (image_width // 8), i * (image_width // 8)) - ) - - image_code.append( - '%s' % - (i * (image_width // 8) + 5, i * 3) - ) +def create_bar_chart(image_width, image_height, times): + create_bar(image_width, image_height, times) + create_polylines(image_width, image_height) + create_time_markers(image_width, image_height) # Write to file + image_code.insert(0, '' % (image_width, image_height)) + image_code.append('') + file = open("time_bar.svg", "w") for i in image_code: file.write(i + '\n') - file.write('') \ No newline at end of file + +def create_bar(image_width: int, image_height: int, times: list): + """ Generates the code for the horizontal multi-color bar chart + + Args: + image_width (int): Total width of the image + image_height (int): Total height of the image + times (list): List of start times of the periods, in minutes + """ + x = 0 + y = 40 + width = 0 + height = image_height - 80 + times.append(1440) + + # Adding the bar parts + for i in range(1, len(times)): + width = math.ceil((((100 / 1440) * (times[i] - times[i - 1]) / 100) * image_width)) + + image_code.append( + '' % (colors[i - 1], x, y, width, height) + ) + + bar_pos_x.append(x) + x += width + + +def create_time_markers(image_width: int, image_height: int): + """ Generates the code for the vertical hour markers + + Args: + image_width (int): Total width of the image + image_height (int): Total height of the image + """ + for i in range(0, 8): + image_code.append( + '' % + (i * (image_width // 8), i * (image_width // 8), image_height - 40) + ) + + image_code.append( + '%s' % + (i * (image_width // 8) + 5, image_height - 45, i * 3) + ) + + +def create_polylines(image_width: int, image_height: int): + """ Generates the code for the polylines which connect the images with the bar sections + + Args: + image_width (int): Total width of the image + image_height (int): Total height of the image + """ + bar_x_start = 0 + + bar_pos_x.append(image_width) + + for i in range(0, len(bar_pos_x) - 1): + # X-Middle of a bar + bar_mid = bar_x_start + (bar_pos_x[i + 1] - bar_x_start) / 2 + + # Position of the image in the window + image_x = (image_width - 32) / 10 + ((i // 2) % 5) * image_width / 5 + + # i == 0, 2, 4, ... => Upper Polylines + if (i % 2 == 0): + polyline_y = 0 + else: + polyline_y = image_height + + if i == 0 or i == 8: + polyline_x = 30 + elif i == 2 or i == 6: + polyline_x = 20 + elif i == 1 or i == 9: + polyline_x = image_height - 30 + elif i == 3 or i == 7: + polyline_x = image_height - 20 + elif i == 5: + polyline_x = image_height - 10 + else: + polyline_x = 10 + + image_code.append( + '' % + (image_x, polyline_y, image_x, polyline_x, bar_mid, polyline_x, bar_mid, image_height / 2, colors[i]) + ) + + # Store the end point of the bar as start point of the next + bar_x_start = bar_pos_x[i + 1] + +# Hannover +#create_bar_chart(1036, 180, [0, 455, 494, 523, 673, 792, 882, 941, 973, 1013]) + +# Other Test bar +#create_bar_chart(1036, 180, [0, 180, 190, 523, 673, 792, 882, 941, 973, 1300]) \ No newline at end of file