Observer pattern, Bugfixes
This commit is contained in:
@@ -127,8 +127,7 @@ CinnamonDynamicWallpaperExtension.prototype = {
|
||||
notification.addButton("open-settings", _("Open settings"));
|
||||
|
||||
notification.connect("action-invoked", () =>
|
||||
Util.spawnCommandLine("/usr/bin/env python3 " +
|
||||
DIRECTORY.path + "/preferences.py"));
|
||||
Util.spawnCommandLine("/usr/bin/env python3 " + DIRECTORY.path + "/src/main.py"));
|
||||
}
|
||||
|
||||
// Put all together
|
||||
|
||||
@@ -517,7 +517,7 @@
|
||||
<object class="GtkLabel" id="etr_period_1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">00:00 - 07:35</property>
|
||||
<property name="label" translatable="yes">00:00 - 00:59</property>
|
||||
<attributes>
|
||||
<attribute name="size" value="15360"/>
|
||||
</attributes>
|
||||
@@ -531,7 +531,7 @@
|
||||
<object class="GtkLabel" id="etr_period_3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">08:15 - 08:43</property>
|
||||
<property name="label" translatable="yes">02:00 - 02:59</property>
|
||||
<attributes>
|
||||
<attribute name="size" value="15360"/>
|
||||
</attributes>
|
||||
@@ -545,7 +545,7 @@
|
||||
<object class="GtkLabel" id="etr_period_5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">11:13 - 13:12</property>
|
||||
<property name="label" translatable="yes">04:00 - 04:59</property>
|
||||
<attributes>
|
||||
<attribute name="size" value="15360"/>
|
||||
</attributes>
|
||||
@@ -559,7 +559,7 @@
|
||||
<object class="GtkLabel" id="etr_period_7">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">14:42 - 15:41</property>
|
||||
<property name="label" translatable="yes">06:00 - 06:59</property>
|
||||
<attributes>
|
||||
<attribute name="size" value="15360"/>
|
||||
</attributes>
|
||||
@@ -573,7 +573,7 @@
|
||||
<object class="GtkLabel" id="etr_period_9">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">16:13 - 16:52</property>
|
||||
<property name="label" translatable="yes">08:00 - 08:59</property>
|
||||
<attributes>
|
||||
<attribute name="size" value="15360"/>
|
||||
</attributes>
|
||||
@@ -789,7 +789,7 @@
|
||||
<object class="GtkLabel" id="etr_period_2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">07:35 - 08:14</property>
|
||||
<property name="label" translatable="yes">01:00 - 01:59</property>
|
||||
<attributes>
|
||||
<attribute name="size" value="15360"/>
|
||||
</attributes>
|
||||
@@ -803,7 +803,7 @@
|
||||
<object class="GtkLabel" id="etr_period_4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">08:44 - 11:12</property>
|
||||
<property name="label" translatable="yes">03:00 - 03:59</property>
|
||||
<attributes>
|
||||
<attribute name="size" value="15360"/>
|
||||
</attributes>
|
||||
@@ -817,7 +817,7 @@
|
||||
<object class="GtkLabel" id="etr_period_6">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">13:13 - 14:41</property>
|
||||
<property name="label" translatable="yes">05:00 - 05:59</property>
|
||||
<attributes>
|
||||
<attribute name="size" value="15360"/>
|
||||
</attributes>
|
||||
@@ -831,7 +831,7 @@
|
||||
<object class="GtkLabel" id="etr_period_8">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">15:41 - 16:12</property>
|
||||
<property name="label" translatable="yes">07:00 - 07:59</property>
|
||||
<attributes>
|
||||
<attribute name="size" value="15360"/>
|
||||
</attributes>
|
||||
@@ -845,7 +845,7 @@
|
||||
<object class="GtkLabel" id="etr_period_10">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">16:53 - 23:59</property>
|
||||
<property name="label" translatable="yes">09:00 - 09:59</property>
|
||||
<attributes>
|
||||
<attribute name="size" value="15360"/>
|
||||
</attributes>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import sys
|
||||
from ui.main_window import *
|
||||
from view.main_window import *
|
||||
from model.main_view_model import *
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import os, json
|
||||
import os
|
||||
from PIL import Image
|
||||
from gi.repository import Gio
|
||||
from gi.repository import Gio, Gdk
|
||||
|
||||
from service.display import *
|
||||
from service.cinnamon_pref_handler import *
|
||||
from service.suntimes import *
|
||||
from service.time_bar_chart import *
|
||||
@@ -10,7 +9,12 @@ from service.location import *
|
||||
from enums.PeriodSourceEnum import *
|
||||
|
||||
class Main_View_Model:
|
||||
""" The main ViewModel for the application
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
""" Initialization
|
||||
"""
|
||||
# Paths
|
||||
self.WORKING_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
self.RES_DIR = self.WORKING_DIR + "/res"
|
||||
@@ -27,7 +31,6 @@ class Main_View_Model:
|
||||
self.network_location_provider = ["geojs.io", "ip-api.com", "ipwho.is"]
|
||||
|
||||
# Objects from scripts
|
||||
self.screen_height = Display().get_screen_height()
|
||||
self.cinnamon_prefs = Cinnamon_Pref_Handler()
|
||||
self.time_bar_chart = Time_Bar_Chart()
|
||||
self.suntimes = Suntimes()
|
||||
@@ -35,11 +38,15 @@ class Main_View_Model:
|
||||
|
||||
self.background_settings = Gio.Settings.new("org.cinnamon.desktop.background")
|
||||
|
||||
# Breakpoint for smaller UI
|
||||
# Other Variables
|
||||
self.display = Gdk.Display.get_default()
|
||||
self.screen_height = self.display.get_monitor(0).get_geometry().height
|
||||
self.breakpoint_ui = 1000
|
||||
|
||||
|
||||
def refresh_charts(self):
|
||||
""" Refreshes the two variants of the time bar charts
|
||||
"""
|
||||
# Stores the start times of the periods in minutes since midnight
|
||||
time_periods_min = []
|
||||
|
||||
@@ -89,7 +96,7 @@ class Main_View_Model:
|
||||
return current_location['success']
|
||||
|
||||
|
||||
def string_to_time_converter(raw_str: str) -> time:
|
||||
def string_to_time_converter(self, raw_str: str) -> time:
|
||||
""" Convert a time string like "12:34" to a time object
|
||||
|
||||
Args:
|
||||
@@ -104,21 +111,30 @@ class Main_View_Model:
|
||||
return time(hour=int(hour), minute=int(minute))
|
||||
|
||||
|
||||
def calulate_time_periods(self) -> list:
|
||||
def time_to_string_converter(self, time: time) -> str:
|
||||
""" Convert a time object to a string like "12:34"
|
||||
|
||||
Args:
|
||||
time (time): Given time object to convert
|
||||
|
||||
Returns:
|
||||
str: Converted string
|
||||
"""
|
||||
return "{:0>2}:{:0>2}".format(time.hour, time.minute)
|
||||
|
||||
|
||||
def calulate_time_periods(self) -> list[time]:
|
||||
""" Calculate the ten time periods based on the period source in the preferences
|
||||
|
||||
Returns:
|
||||
list[time]: Time periods
|
||||
"""
|
||||
result = []
|
||||
|
||||
if self.cinnamon_prefs.period_source == PeriodSourceEnum.CUSTOMTIMEPERIODS:
|
||||
# User uses custom time periods
|
||||
return [
|
||||
self.string_to_time_converter(self.cinnamon_prefs.period_custom_start_time[0]),
|
||||
self.string_to_time_converter(self.cinnamon_prefs.period_custom_start_time[1]),
|
||||
self.string_to_time_converter(self.cinnamon_prefs.period_custom_start_time[2]),
|
||||
self.string_to_time_converter(self.cinnamon_prefs.period_custom_start_time[3]),
|
||||
self.string_to_time_converter(self.cinnamon_prefs.period_custom_start_time[4]),
|
||||
self.string_to_time_converter(self.cinnamon_prefs.period_custom_start_time[5]),
|
||||
self.string_to_time_converter(self.cinnamon_prefs.period_custom_start_time[6]),
|
||||
self.string_to_time_converter(self.cinnamon_prefs.period_custom_start_time[7]),
|
||||
self.string_to_time_converter(self.cinnamon_prefs.period_custom_start_time[8]),
|
||||
self.string_to_time_converter(self.cinnamon_prefs.period_custom_start_time[9])
|
||||
]
|
||||
for i in range(0, 10):
|
||||
result.append(self.string_to_time_converter(self.cinnamon_prefs.period_custom_start_time[i]))
|
||||
else:
|
||||
# Time periods have to be estimate by coordinates
|
||||
if self.cinnamon_prefs.period_source == PeriodSourceEnum.NETWORKLOCATION:
|
||||
@@ -131,7 +147,9 @@ class Main_View_Model:
|
||||
self.suntimes.calc_suntimes(self.cinnamon_prefs.latitude_custom, self.cinnamon_prefs.longitude_custom)
|
||||
|
||||
# Return the time periods
|
||||
return self.suntimes.day_periods
|
||||
result = self.suntimes.day_periods
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def refresh_image(self):
|
||||
@@ -158,6 +176,58 @@ class Main_View_Model:
|
||||
self.background_settings['picture-options'] = self.cinnamon_prefs.picture_aspect
|
||||
|
||||
|
||||
def get_images_from_folder(self, URI: str) -> list:
|
||||
""" List all images in a folder
|
||||
|
||||
Args:
|
||||
URI (str): Absolute path of the folder
|
||||
|
||||
Returns:
|
||||
list: List of file names which are images
|
||||
"""
|
||||
items = []
|
||||
|
||||
for file in os.listdir(URI):
|
||||
if file.endswith(("jpg", "jpeg", "png", "bmp", "svg")):
|
||||
items.append(file)
|
||||
|
||||
items.sort()
|
||||
return items
|
||||
|
||||
|
||||
def extract_heic_file(self, file_uri: str) -> bool:
|
||||
""" Extract a heic file to an internal folder
|
||||
|
||||
Args:
|
||||
file_uri (str): Absolute path to the heic file
|
||||
|
||||
Returns:
|
||||
bool: Extraction was successful
|
||||
"""
|
||||
try:
|
||||
extract_folder = self.IMAGES_DIR + "/extracted_images/"
|
||||
|
||||
file_name: str = file_uri[file_uri.rfind("/") + 1:]
|
||||
file_name = file_name[:file_name.rfind(".")]
|
||||
|
||||
# Create the buffer folder if its not existing
|
||||
try:
|
||||
os.mkdir(extract_folder)
|
||||
except:
|
||||
pass
|
||||
|
||||
# Cleanup the folder
|
||||
for file in self.get_images_from_folder(extract_folder):
|
||||
os.remove(extract_folder + file)
|
||||
|
||||
# Extract the HEIC file
|
||||
os.system("heif-convert '" + file_uri + "' '" + extract_folder + file_name + ".jpg'")
|
||||
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
|
||||
|
||||
def set_background_gradient(self):
|
||||
""" Setting a gradient background to hide images, which are not high enough
|
||||
"""
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
import gi
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gdk
|
||||
|
||||
class Display:
|
||||
""" Handling display informations and actions
|
||||
"""
|
||||
def __init__(self) -> None:
|
||||
self.display = Gdk.Display.get_default()
|
||||
|
||||
|
||||
def get_screen_height(self) -> int:
|
||||
""" Estimate the height resolution of the primary display
|
||||
|
||||
Returns:
|
||||
int: Height in pixel
|
||||
"""
|
||||
geometry = self.display.get_monitor(0).get_geometry()
|
||||
|
||||
return geometry.height
|
||||
@@ -10,10 +10,6 @@ class Suntimes:
|
||||
"""
|
||||
def __init__(self) -> None:
|
||||
""" Initialization
|
||||
|
||||
Args:
|
||||
latitude (float): Latitude of the position
|
||||
longitude (float): Longitude of the position
|
||||
"""
|
||||
self.today = datetime.now()
|
||||
|
||||
|
||||
@@ -32,11 +32,10 @@ class Dialogs(Gtk.Window):
|
||||
dialog.set_default_size(800, 400)
|
||||
|
||||
response = dialog.run()
|
||||
location = ""
|
||||
|
||||
if response == Gtk.ResponseType.OK:
|
||||
location = dialog.get_filename()
|
||||
elif response == Gtk.ResponseType.CANCEL:
|
||||
location = ""
|
||||
|
||||
dialog.destroy()
|
||||
|
||||
@@ -8,17 +8,13 @@ gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, GdkPixbuf
|
||||
|
||||
# Packages
|
||||
import time, subprocess
|
||||
import subprocess
|
||||
from datetime import timedelta
|
||||
|
||||
# Local scripts
|
||||
from model.main_view_model import *
|
||||
from service.images import *
|
||||
from service.suntimes import *
|
||||
from service.time_bar_chart import *
|
||||
from ui.dialogs import *
|
||||
from view.dialogs import *
|
||||
from enums.ImageSourceEnum import *
|
||||
from enums.NetworkLocationProvider import *
|
||||
from enums.PeriodSourceEnum import *
|
||||
|
||||
|
||||
@@ -43,10 +39,8 @@ class Main_Window:
|
||||
|
||||
|
||||
# Objects from scripts
|
||||
self.images = Images()
|
||||
self.dialogs = Dialogs()
|
||||
self.suntimes = Suntimes()
|
||||
self.time_bar_chart = Time_Bar_Chart()
|
||||
|
||||
|
||||
|
||||
# Page 1: Image Configuration
|
||||
@@ -72,7 +66,7 @@ class Main_Window:
|
||||
|
||||
# Time bar chart
|
||||
self.img_bar_images: Gtk.Image = self.builder.get_object("img_bar_images")
|
||||
self.etr_periods: list[Gtk.Entry] = [
|
||||
self.etr_periods: list[Gtk.Label] = [
|
||||
self.builder.get_object("etr_period_1"), self.builder.get_object("etr_period_2"),
|
||||
self.builder.get_object("etr_period_3"), self.builder.get_object("etr_period_4"),
|
||||
self.builder.get_object("etr_period_5"), self.builder.get_object("etr_period_6"),
|
||||
@@ -173,17 +167,11 @@ class Main_Window:
|
||||
|
||||
# Page 1: Image Configuration
|
||||
self.add_items_to_combo_box(self.cb_image_set, self.view_model.image_sets)
|
||||
|
||||
self.tb_image_set.set_active(self.view_model.cinnamon_prefs.image_source == ImageSourceEnum.IMAGESET)
|
||||
self.tb_heic_file.set_active(self.view_model.cinnamon_prefs.image_source == ImageSourceEnum.HEICFILE)
|
||||
self.tb_source_folder.set_active(self.view_model.cinnamon_prefs.image_source == ImageSourceEnum.SOURCEFOLDER)
|
||||
self.image_source = self.image_source # This triggers the @image_source.setter
|
||||
|
||||
# Page 2: Location & Times
|
||||
self.add_items_to_combo_box(self.cb_network_provider, self.view_model.network_location_provider)
|
||||
|
||||
self.tb_network_location.set_active(self.view_model.cinnamon_prefs.period_source == PeriodSourceEnum.NETWORKLOCATION)
|
||||
self.tb_custom_location.set_active(self.view_model.cinnamon_prefs.period_source == PeriodSourceEnum.CUSTOMLOCATION)
|
||||
self.tb_time_periods.set_active(self.view_model.cinnamon_prefs.period_source == PeriodSourceEnum.CUSTOMTIMEPERIODS)
|
||||
self.period_source = self.period_source # This triggers the @period_source.setter
|
||||
|
||||
# Page 3: Behaviour
|
||||
self.add_items_to_combo_box(self.cb_picture_aspect, self.view_model.picture_aspects)
|
||||
@@ -195,6 +183,81 @@ class Main_Window:
|
||||
Gtk.main()
|
||||
|
||||
|
||||
############################################################
|
||||
# Observer #
|
||||
############################################################
|
||||
|
||||
|
||||
@property
|
||||
def selected_image_set(self):
|
||||
return self.view_model.cinnamon_prefs.selected_image_set
|
||||
|
||||
@selected_image_set.setter
|
||||
def selected_image_set(self, new_value):
|
||||
# Save to the preferences
|
||||
self.view_model.cinnamon_prefs.selected_image_set = new_value
|
||||
|
||||
# Refresh images
|
||||
image_names = self.view_model.get_images_from_folder(self.view_model.cinnamon_prefs.source_folder)
|
||||
self.load_image_options_to_combo_boxes(image_names)
|
||||
|
||||
# Image sets have the same names for the images:
|
||||
# 9.jpg = Period 0
|
||||
# 1.jpg = Period 1
|
||||
# 2.jpg = Period 2...
|
||||
for i in range(0, 10):
|
||||
self.cb_periods[i].set_active(i + 1)
|
||||
|
||||
|
||||
@property
|
||||
def image_source(self):
|
||||
return self.view_model.cinnamon_prefs.image_source
|
||||
|
||||
@image_source.setter
|
||||
def image_source(self, new_value):
|
||||
self.view_model.cinnamon_prefs.image_source = new_value
|
||||
|
||||
# Disable the wrong ToggleButtons
|
||||
self.tb_image_set.set_active(new_value == ImageSourceEnum.IMAGESET)
|
||||
self.tb_heic_file.set_active(new_value == ImageSourceEnum.HEICFILE)
|
||||
self.tb_source_folder.set_active(new_value == ImageSourceEnum.SOURCEFOLDER)
|
||||
|
||||
# Show or hide ListBoxRows
|
||||
self.lbr_image_set.set_visible(new_value == ImageSourceEnum.IMAGESET)
|
||||
self.lbr_heic_file.set_visible(new_value == ImageSourceEnum.HEICFILE)
|
||||
self.lbr_source_folder.set_visible(new_value == ImageSourceEnum.SOURCEFOLDER)
|
||||
|
||||
# Make the comboboxes invisible
|
||||
for combobox in self.cb_periods:
|
||||
combobox.set_visible(new_value != ImageSourceEnum.IMAGESET)
|
||||
|
||||
|
||||
@property
|
||||
def period_source(self):
|
||||
return self.view_model.cinnamon_prefs.period_source
|
||||
|
||||
|
||||
@period_source.setter
|
||||
def period_source(self, new_value):
|
||||
self.view_model.cinnamon_prefs.period_source = new_value
|
||||
|
||||
self.tb_network_location.set_active(new_value == PeriodSourceEnum.NETWORKLOCATION)
|
||||
self.tb_custom_location.set_active(new_value == PeriodSourceEnum.CUSTOMLOCATION)
|
||||
self.tb_time_periods.set_active(new_value == PeriodSourceEnum.CUSTOMTIMEPERIODS)
|
||||
|
||||
# Show/Hide the right ListBoxRows
|
||||
self.lbr_network_refresh_time.set_visible(new_value == PeriodSourceEnum.NETWORKLOCATION)
|
||||
self.lbr_network_provider.set_visible(new_value == PeriodSourceEnum.NETWORKLOCATION)
|
||||
self.lbr_current_location.set_visible(new_value == PeriodSourceEnum.NETWORKLOCATION)
|
||||
self.lbr_custom_location_longitude.set_visible(new_value == PeriodSourceEnum.CUSTOMLOCATION)
|
||||
self.lbr_custom_location_latitude.set_visible(new_value == PeriodSourceEnum.CUSTOMLOCATION)
|
||||
self.lbr_time_periods.set_visible(new_value == PeriodSourceEnum.CUSTOMTIMEPERIODS)
|
||||
|
||||
self.refresh_charts_and_times()
|
||||
|
||||
|
||||
|
||||
|
||||
############################################################
|
||||
# UI Helper #
|
||||
############################################################
|
||||
@@ -214,6 +277,21 @@ class Main_Window:
|
||||
combobox.set_active(i)
|
||||
|
||||
|
||||
def get_active_combobox_item(self, combobox: Gtk.ComboBox) -> str:
|
||||
""" Request the current selected combobox label
|
||||
|
||||
Args:
|
||||
combobox (Gtk.ComboBox): ComboBox where to get value from
|
||||
|
||||
Returns:
|
||||
str: Selected value
|
||||
"""
|
||||
tree_iter = combobox.get_active_iter()
|
||||
|
||||
model = combobox.get_model()
|
||||
return model[tree_iter][0]
|
||||
|
||||
|
||||
def add_items_to_combo_box(self, combobox: Gtk.ComboBox, items: list):
|
||||
""" Add items to a combo box
|
||||
|
||||
@@ -265,13 +343,24 @@ class Main_Window:
|
||||
|
||||
image_preview.set_from_pixbuf(pixbuf)
|
||||
except:
|
||||
self.dialogs.message_dialog("Error on load images. Please check the configuration!", Gtk.MessageType.ERROR)
|
||||
pass
|
||||
|
||||
|
||||
def refresh_charts(self):
|
||||
def refresh_charts_and_times(self):
|
||||
""" Refresh the charts and put them to the image views
|
||||
"""
|
||||
self.view_model.refresh_charts()
|
||||
start_times = self.view_model.calulate_time_periods()
|
||||
|
||||
for i in range(0, 10):
|
||||
label_txt = self.view_model.time_to_string_converter(start_times[i]) + " - "
|
||||
|
||||
if i != 9:
|
||||
label_txt += self.view_model.time_to_string_converter(start_times[i + 1])
|
||||
else:
|
||||
label_txt += "23:59"
|
||||
|
||||
self.etr_periods[i].set_text(label_txt)
|
||||
|
||||
# Load to the views
|
||||
pixbuf = GdkPixbuf.Pixbuf.new_from_file(self.view_model.TIMEBAR_URI_POLYLINES)
|
||||
@@ -287,22 +376,6 @@ class Main_Window:
|
||||
# Callbacks #
|
||||
############################################################
|
||||
|
||||
## Image Configuration
|
||||
|
||||
def show_image_configuration_entries(self, button_id: int):
|
||||
self.tb_image_set.set_active(button_id == 1)
|
||||
self.tb_heic_file.set_active(button_id == 2)
|
||||
self.tb_source_folder.set_active(button_id == 3)
|
||||
|
||||
self.lbr_image_set.set_visible(button_id == 1)
|
||||
self.lbr_heic_file.set_visible(button_id == 2)
|
||||
self.lbr_source_folder.set_visible(button_id == 3)
|
||||
|
||||
# Make the comboboxes invisible
|
||||
for combobox in self.cb_periods:
|
||||
combobox.set_visible(button_id != 1)
|
||||
|
||||
|
||||
# +-----------+-----------+---------------+
|
||||
# | Image Set | HEIC file | Source Folder |
|
||||
# +-----------+-----------+---------------+
|
||||
@@ -314,10 +387,9 @@ class Main_Window:
|
||||
button (Gtk.ToggleButton): Clicked ToggleButton
|
||||
"""
|
||||
if button.get_active():
|
||||
self.view_model.cinnamon_prefs.image_source = ImageSourceEnum.IMAGESET
|
||||
self.show_image_configuration_entries(1)
|
||||
self.image_source = ImageSourceEnum.IMAGESET
|
||||
|
||||
self.set_active_combobox_item(self.cb_image_set, self.view_model.cinnamon_prefs.selected_image_set)
|
||||
self.set_active_combobox_item(self.cb_image_set, self.selected_image_set)
|
||||
|
||||
for i, combobox in enumerate(self.cb_periods):
|
||||
selected_image_name = self.view_model.cinnamon_prefs.period_images[i]
|
||||
@@ -331,11 +403,10 @@ class Main_Window:
|
||||
button (Gtk.ToggleButton): Clicked ToggleButton
|
||||
"""
|
||||
if button.get_active():
|
||||
self.view_model.cinnamon_prefs.image_source = ImageSourceEnum.HEICFILE
|
||||
self.show_image_configuration_entries(2)
|
||||
self.image_source = ImageSourceEnum.HEICFILE
|
||||
|
||||
# Load images from source folder
|
||||
files = self.images.get_images_from_folder(self.view_model.cinnamon_prefs.source_folder)
|
||||
files = self.view_model.get_images_from_folder(self.view_model.cinnamon_prefs.source_folder)
|
||||
|
||||
if len(files) != 0:
|
||||
self.load_image_options_to_combo_boxes(files)
|
||||
@@ -354,15 +425,14 @@ class Main_Window:
|
||||
button (Gtk.ToggleButton): Clicked ToggleButton
|
||||
"""
|
||||
if button.get_active():
|
||||
self.view_model.cinnamon_prefs.image_source = ImageSourceEnum.SOURCEFOLDER
|
||||
self.show_image_configuration_entries(3)
|
||||
self.image_source = ImageSourceEnum.SOURCEFOLDER
|
||||
|
||||
# Load the source folder to the view
|
||||
# This will update the comboboxes in the preview to contain the right items
|
||||
self.lbl_source_folder.set_label(self.view_model.cinnamon_prefs.source_folder)
|
||||
|
||||
# Load files from saved source folder
|
||||
files = self.images.get_images_from_folder(self.view_model.cinnamon_prefs.source_folder)
|
||||
files = self.view_model.get_images_from_folder(self.view_model.cinnamon_prefs.source_folder)
|
||||
|
||||
if len(files) != 0:
|
||||
self.load_image_options_to_combo_boxes(files)
|
||||
@@ -385,28 +455,15 @@ class Main_Window:
|
||||
Args:
|
||||
combobox (Gtk.ComboBox): The used ComboBox
|
||||
"""
|
||||
tree_iter = combobox.get_active_iter()
|
||||
|
||||
if tree_iter is not None and self.view_model.cinnamon_prefs.image_source == ImageSourceEnum.IMAGESET:
|
||||
if self.view_model.cinnamon_prefs.image_source == ImageSourceEnum.IMAGESET:
|
||||
# Get the selected value
|
||||
model = combobox.get_model()
|
||||
selected_image_set = model[tree_iter][0]
|
||||
selected_image_set = self.get_active_combobox_item(combobox)
|
||||
|
||||
# Store to the preferences
|
||||
self.view_model.cinnamon_prefs.selected_image_set = selected_image_set
|
||||
self.view_model.cinnamon_prefs.source_folder = \
|
||||
self.view_model.IMAGES_DIR + "/included_image_sets/" + selected_image_set + "/"
|
||||
|
||||
# Load all possible options to the comboboxes
|
||||
image_names = self.images.get_images_from_folder(self.view_model.cinnamon_prefs.source_folder)
|
||||
self.load_image_options_to_combo_boxes(image_names)
|
||||
|
||||
# Image sets have the same names for the images:
|
||||
# 9.jpg = Period 0
|
||||
# 1.jpg = Period 1
|
||||
# 2.jpg = Period 2...
|
||||
for i in range(0, 10):
|
||||
self.cb_periods[i].set_active(i + 1)
|
||||
self.selected_image_set = selected_image_set
|
||||
|
||||
|
||||
# +----------------------------------------------+
|
||||
@@ -423,7 +480,7 @@ class Main_Window:
|
||||
file_path: str = fc_button.get_filename()
|
||||
|
||||
# Extract the heic file
|
||||
result = self.images.extract_heic_file(file_path)
|
||||
result = self.view_model.extract_heic_file(file_path)
|
||||
|
||||
# Update the preferences
|
||||
self.view_model.cinnamon_prefs.selected_image_set = ""
|
||||
@@ -432,7 +489,7 @@ class Main_Window:
|
||||
# Load images only if the extraction was successfully
|
||||
if result:
|
||||
# Collect all extracted images and push them to the comboboxes
|
||||
image_names = self.images.get_images_from_folder(self.view_model.cinnamon_prefs.source_folder)
|
||||
image_names = self.view_model.get_images_from_folder(self.view_model.cinnamon_prefs.source_folder)
|
||||
self.load_image_options_to_combo_boxes(image_names)
|
||||
else:
|
||||
self.dialogs.message_dialog("Error during extraction!", Gtk.MessageType.ERROR)
|
||||
@@ -450,7 +507,7 @@ class Main_Window:
|
||||
button (Gtk.Button): The clicked button
|
||||
"""
|
||||
folder = self.dialogs.source_folder_dialog()
|
||||
files = self.images.get_images_from_folder(folder)
|
||||
files = self.view_model.get_images_from_folder(folder)
|
||||
|
||||
# Update the preferences
|
||||
self.view_model.cinnamon_prefs.selected_image_set = ""
|
||||
@@ -476,15 +533,11 @@ class Main_Window:
|
||||
Args:
|
||||
combobox (Gtk.ComboBox): The used ComboBox
|
||||
"""
|
||||
tree_iter = combobox.get_active_iter()
|
||||
|
||||
combobox_name = Gtk.Buildable.get_name(combobox)
|
||||
period_index = int(combobox_name[10:11])
|
||||
|
||||
if tree_iter is not None:
|
||||
# Get the selected value
|
||||
model = combobox.get_model()
|
||||
image_file_name = model[tree_iter][0]
|
||||
image_file_name = self.get_active_combobox_item(combobox)
|
||||
|
||||
# Store selection to preferences
|
||||
self.view_model.cinnamon_prefs.period_images[period_index] = image_file_name
|
||||
@@ -497,25 +550,6 @@ class Main_Window:
|
||||
|
||||
## Location & Times
|
||||
|
||||
def show_location_times_entries(self, button_id: int):
|
||||
""" Show or hide parts of the Locations & Times menu
|
||||
|
||||
Args:
|
||||
button_id (int): ID of the button, 1 = Network, 2 = Custom Location, 3 = Custom Time Periods
|
||||
"""
|
||||
self.tb_network_location.set_active(button_id == 1)
|
||||
self.tb_custom_location.set_active(button_id == 2)
|
||||
self.tb_time_periods.set_active(button_id == 3)
|
||||
|
||||
# Show/Hide the right ListBoxRows
|
||||
self.lbr_network_refresh_time.set_visible(button_id == 1)
|
||||
self.lbr_network_provider.set_visible(button_id == 1)
|
||||
self.lbr_current_location.set_visible(button_id == 1)
|
||||
self.lbr_custom_location_longitude.set_visible(button_id == 2)
|
||||
self.lbr_custom_location_latitude.set_visible(button_id == 2)
|
||||
self.lbr_time_periods.set_visible(button_id == 3)
|
||||
|
||||
|
||||
def on_toggle_button_network_location_clicked(self, button: Gtk.ToggleButton):
|
||||
""" User clicks on the ToggleButton for the network location
|
||||
|
||||
@@ -523,19 +557,15 @@ class Main_Window:
|
||||
button (Gtk.ToggleButton): Clicked ToggleButton
|
||||
"""
|
||||
if button.get_active():
|
||||
self.view_model.cinnamon_prefs.period_source = PeriodSourceEnum.NETWORKLOCATION
|
||||
self.show_location_times_entries(1)
|
||||
self.period_source = PeriodSourceEnum.NETWORKLOCATION
|
||||
|
||||
self.spb_network_refresh_time.set_value(self.view_model.cinnamon_prefs.location_refresh_intervals)
|
||||
self.set_active_combobox_item(self.cb_network_provider, self.view_model.cinnamon_prefs.network_location_provider)
|
||||
|
||||
self.refresh_charts()
|
||||
|
||||
|
||||
def on_toggle_button_custom_location_clicked(self, button: Gtk.ToggleButton):
|
||||
if button.get_active():
|
||||
self.view_model.cinnamon_prefs.period_source = PeriodSourceEnum.CUSTOMLOCATION
|
||||
self.show_location_times_entries(2)
|
||||
self.period_source = PeriodSourceEnum.CUSTOMLOCATION
|
||||
|
||||
self.etr_latitude.set_text(str(self.view_model.cinnamon_prefs.latitude_custom))
|
||||
self.etr_longitude.set_text(str(self.view_model.cinnamon_prefs.longitude_custom))
|
||||
@@ -543,8 +573,7 @@ class Main_Window:
|
||||
|
||||
def on_toggle_button_time_periods_clicked(self, button: Gtk.ToggleButton):
|
||||
if button.get_active():
|
||||
self.view_model.cinnamon_prefs.period_source = PeriodSourceEnum.CUSTOMTIMEPERIODS
|
||||
self.show_location_times_entries(3)
|
||||
self.period_source = PeriodSourceEnum.CUSTOMTIMEPERIODS
|
||||
|
||||
for i in range(0, 9):
|
||||
pref_value = self.view_model.cinnamon_prefs.period_custom_start_time[i + 1]
|
||||
@@ -580,7 +609,7 @@ class Main_Window:
|
||||
self.lb_period_end[index].set_text(str(time_previous_end.hour).rjust(2, '0') + ":" + str(time_previous_end.minute).rjust(2, '0'))
|
||||
|
||||
|
||||
self.refresh_charts()
|
||||
self.refresh_charts_and_times()
|
||||
|
||||
|
||||
def on_spb_network_location_refresh_time_changed(self, spin_button: Gtk.SpinButton):
|
||||
@@ -598,11 +627,7 @@ class Main_Window:
|
||||
Args:
|
||||
combobox (Gtk.ComboBox): The used ComboBox
|
||||
"""
|
||||
tree_iter = combobox.get_active_iter()
|
||||
|
||||
if tree_iter is not None:
|
||||
model = combobox.get_model()
|
||||
self.view_model.cinnamon_prefs.network_location_provider = model[tree_iter][0]
|
||||
self.view_model.cinnamon_prefs.network_location_provider = self.get_active_combobox_item(combobox)
|
||||
|
||||
success = self.view_model.refresh_location()
|
||||
|
||||
@@ -622,7 +647,7 @@ class Main_Window:
|
||||
"""
|
||||
try:
|
||||
self.view_model.cinnamon_prefs.longitude_custom = float(entry.get_text())
|
||||
self.refresh_charts()
|
||||
self.refresh_charts_and_times()
|
||||
except:
|
||||
pass
|
||||
|
||||
@@ -635,7 +660,7 @@ class Main_Window:
|
||||
"""
|
||||
try:
|
||||
self.view_model.cinnamon_prefs.latitude_custom = float(entry.get_text())
|
||||
self.refresh_charts()
|
||||
self.refresh_charts_and_times()
|
||||
except:
|
||||
pass
|
||||
|
||||
@@ -648,11 +673,7 @@ class Main_Window:
|
||||
Args:
|
||||
combobox (Gtk.ComboBox): The used ComboBox
|
||||
"""
|
||||
tree_iter = combobox.get_active_iter()
|
||||
|
||||
if tree_iter is not None:
|
||||
model = combobox.get_model()
|
||||
self.view_model.cinnamon_prefs.picture_aspect = model[tree_iter][0]
|
||||
self.view_model.cinnamon_prefs.picture_aspect = self.get_active_combobox_item(combobox)
|
||||
|
||||
|
||||
def on_sw_dynamic_background_color_state_set(self, _: Gtk.Switch, state: bool):
|
||||
@@ -700,7 +721,10 @@ class Main_Window:
|
||||
try:
|
||||
self.on_apply()
|
||||
except:
|
||||
pass
|
||||
self.dialogs.message_dialog(
|
||||
"Error on apply the settings. Please check the settings and contact the developer.",
|
||||
Gtk.MessageType.ERROR
|
||||
)
|
||||
|
||||
# Close the window
|
||||
self.on_destroy()
|
||||
@@ -713,8 +737,9 @@ class Main_Window:
|
||||
self.view_model.cinnamon_prefs.store_preferences()
|
||||
|
||||
# Use the new settings
|
||||
# todo loop = Loop()
|
||||
#loop.exchange_image()
|
||||
self.view_model.refresh_image()
|
||||
self.view_model.set_background_gradient()
|
||||
|
||||
|
||||
def on_destroy(self, *args):
|
||||
""" Lifecycle handler when window will be destroyed
|
||||
Reference in New Issue
Block a user